-- =================================================================================================================== -- SQLI-WIN-013: En planlagt opgave kørte ikke, da den skulle -- =================================================================================================================== -- Regel-id: SQLI-WIN-013 -- Titel: En planlagt opgave kørte ikke, da den skulle -- Alvor: Medium. -- Versioner: Windows Server 2012 og nyere. -- -- Hvad tjekkes, 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. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- 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. -- -- Grænseværdier (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 -- -- 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). -- -- Data kommer fra (collector, fil – medlemmer, interval): -- src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetTasksAsync (CimQueries.TaskQuery og -- PS_ScheduledTask.GetInfoByName), hvert 15. minut fra src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectTasksAsync. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : MissedScheduledTaskRule -- -- Read-only: Ja. Reglen sender ingen SQL. Agenten læser kun fra Windows: CIM/WQL-forespørgsler (SELECT), -- hændelsesloggen og for planlagte opgaver Task Schedulers skrivebeskyttede GetInfo. Den starter, stopper -- eller ændrer intet på serveren. Filen indeholder kun kommentarer; forespørgslerne mod Windows står herunder. -- =================================================================================================================== -- 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)) }