One reviewable file per rule id with a Danish header: what and why, thresholds with config keys and defaults, severity, required rights (never local administrator), supported versions, collector file and member, and the evaluation in plain Danish. The Windows rules use no SQL: their exact CIM/WQL queries, event log XPath and a read-only PowerShell snippet to verify them are in a comment block. SQLI-SYN-001/002 carry the exact SQL a SQL check runs (session settings, transaction that is always rolled back, SELECT 1). A test checks every server and check rule has its file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
50 lines
3 KiB
SQL
50 lines
3 KiB
SQL
/*
|
||
SQLI-WIN-012 – En planlagt opgave fejlede sidste gang, den kørte
|
||
=================================================================
|
||
|
||
Hvad og hvorfor
|
||
En opgave i Opgavestyring (Task Scheduler) sluttede med en fejlkode. Planlagte opgaver er ofte oprydning, eksport,
|
||
integrationer eller filbackup: når de fejler, opdager ingen det, før noget mangler.
|
||
|
||
Tærskler (agentens appsettings.json)
|
||
SQLInsight:Servers:Tasks:IncludeMicrosoftTasks standard false (Microsofts egne opgaver under \Microsoft\ overvåges ikke)
|
||
SQLInsight:Servers:Tasks:Ignore opgaver der aldrig overvåges (sti\navn eller præfiks*)
|
||
SQLInsight:Servers:Tasks:MaxWatched standard 50 (højst så mange opgaver pr. server)
|
||
Resultater, der ikke er fejl: 0x0, 0x41300 (klar), 0x41301 (kører), 0x41302 (deaktiveret), 0x41303 (har ikke kørt),
|
||
0x41304 (ingen flere kørsler), 0x41325 (i kø), 0x8004131F (kørte allerede) – src/SQLInsight.Core/Servers/ServerTasks.cs.
|
||
|
||
Alvor
|
||
Middel.
|
||
|
||
Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator)
|
||
WMI Enable Account/Remote Enable på root\Microsoft\Windows\TaskScheduler. Agenten ser kun opgaver, hvis egne
|
||
sikkerhedsindstillinger tillader kontoen at læse dem. Seneste resultat læses med Task Schedulers GetInfo (et
|
||
skrivebeskyttet CIM-metodekald, som Get-ScheduledTaskInfo); over WinRM kræver metodekald, at kontoen også har
|
||
Execute-ret i WinRM – ellers bruges DCOM.
|
||
|
||
Understøttede versioner
|
||
Windows Server 2012 og nyere (navnerummet TaskScheduler findes ikke på 2008 R2: "ikke målbar").
|
||
|
||
Collector
|
||
src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetTasksAsync (CimQueries.TaskQuery og
|
||
PS_ScheduledTask.GetInfoByName), hvert 15. minut (SQLInsight:Servers:Intervals:tasks) fra
|
||
src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectTasksAsync.
|
||
Regel
|
||
src/SQLInsight.Rules/Servers/WindowsServerRules.cs – FailedScheduledTaskRule
|
||
|
||
Evaluering
|
||
Et fund pr. aktiveret, overvåget opgave, hvis LastTaskResult er en fejl.
|
||
|
||
Reglen bruger ikke SQL. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet.
|
||
|
||
CIM/WQL (namespace root\Microsoft\Windows\TaskScheduler):
|
||
SELECT TaskName, TaskPath, State FROM MSFT_ScheduledTask
|
||
CIM-metode (skrivebeskyttet) pr. overvåget opgave:
|
||
PS_ScheduledTask.GetInfoByName(TaskName, TaskPath) -> cmdletOutput: MSFT_TaskDynamicInfo
|
||
(LastRunTime, LastTaskResult, NextRunTime, NumberOfMissedRuns)
|
||
|
||
Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto):
|
||
$s = New-CimSession -ComputerName SERVER
|
||
Get-ScheduledTask -CimSession $s | Where-Object TaskPath -notlike '\Microsoft\*' | Get-ScheduledTaskInfo -CimSession $s |
|
||
Select-Object TaskPath, TaskName, LastRunTime, @{n='Resultat';e={'0x{0:X}' -f $_.LastTaskResult}}, NextRunTime, NumberOfMissedRuns
|
||
*/
|