/* 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)) } */