-- =================================================================================================================== -- SQLI-WIN-012: En planlagt opgave fejlede sidste gang, den kørte -- =================================================================================================================== -- Regel-id: SQLI-WIN-012 -- Titel: En planlagt opgave fejlede sidste gang, den kørte -- Alvor: Medium. -- Versioner: Windows Server 2012 og nyere (navnerummet TaskScheduler findes ikke på 2008 R2: "ikke målbar"). -- -- Hvad tjekkes, 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. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Et fund pr. aktiveret, overvåget opgave, hvis LastTaskResult er en fejl. -- -- Grænseværdier (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. -- -- 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. -- -- Data kommer fra (collector, fil – medlemmer, interval): -- 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. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : FailedScheduledTaskRule -- -- 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 -- (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