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>
44 lines
2.4 KiB
SQL
44 lines
2.4 KiB
SQL
/*
|
||
SQLI-WIN-013 – En planlagt opgave kørte ikke, da den skulle
|
||
============================================================
|
||
|
||
Hvad og hvorfor
|
||
Opgaven skulle have kørt, men gjorde det ikke: Opgavestyring kørte ikke, betingelserne var ikke opfyldt (fx "kun når
|
||
brugeren er logget på"), eller serveren var slukket. Det, opgaven gør, er ikke sket.
|
||
|
||
Tærskler (agentens appsettings.json)
|
||
SQLInsight:Servers:Tasks:LateMinutes standard 60 (næste kørsel mere end så mange minutter i fortiden)
|
||
SQLInsight:Servers:Tasks:IncludeMicrosoftTasks standard false
|
||
SQLInsight:Servers:Tasks:Ignore opgaver der aldrig overvåges
|
||
|
||
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 (se SQLI-WIN-012 om GetInfo over WinRM).
|
||
|
||
Understøttede versioner
|
||
Windows Server 2012 og nyere.
|
||
|
||
Collector
|
||
src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetTasksAsync (CimQueries.TaskQuery og
|
||
PS_ScheduledTask.GetInfoByName), hvert 15. minut fra src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectTasksAsync.
|
||
Regel
|
||
src/SQLInsight.Rules/Servers/WindowsServerRules.cs – MissedScheduledTaskRule
|
||
|
||
Evaluering
|
||
Et fund pr. aktiveret, overvåget opgave, der ikke kører nu, og hvor enten NumberOfMissedRuns > 0, eller NextRunTime
|
||
ligger mere end LateMinutes i fortiden, uden at LastRunTime er efter det tidspunkt.
|
||
|
||
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
|
||
|
||
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\*' -and $_.State -ne 'Disabled' } |
|
||
Get-ScheduledTaskInfo -CimSession $s | Where-Object { $_.NumberOfMissedRuns -gt 0 -or ($_.NextRunTime -and $_.NextRunTime -lt (Get-Date).AddMinutes(-60)) }
|
||
*/
|