BUG: Windows Tasks discovers disabled Taks

Hallo,

Bis 1.6 war es so, dass deaktivierte Tasks gar nicht gemonitored wurden. → Wurde eine Task deaktiviert, dann erzeugte das einen vanished service.

Beim 2.0 habe ich nur die Möglichkeit einen Monitoring state if task is not enabled zu definieren. Das könnte ich natürlich auf WARN, CRIT oder UNKNOWN stellen damit ich merke wenn was deaktiviert wurde. Wenn der Zustand aber länger anhält muss ich es per Downtime ausblenden. → Dann bekomme ich aber nicht mehr mit wenn jemand den Task wieder aktiviert und der Task OK wird (wenn an der Stelle keine Notification aktiv ist).

Wie stelle ich bei Version 2.0 das alte Verhalten für das Discovery der Windows Tasks wieder her?
Vanished bei Deaktivierung bzw. unmonitored bei Aktivierung

Hi,

also ich blende die unerwünschte Task`s mittels
image
und entsprechenden Regex aus
oder eben hier:
image

Disabled services berücksichtigt ja nicht den Zustand des Tasks sondern blendet ihn generell anhand des Namens aus.

Dein zweiter Screenshot stellt das dar was mir nicht weiterhilft, wie ich oben bereits beschrieben habe.

→ Ich hätte gerne das Verhalten von 1.6 wieder. Scheinbar geht das nur wenn ich das Agent Plugin so verändere, dass es nur aktivierte Tasks offenbart.

hm wenn dir das mapping der Zustände nicht hilft,
wird es wohl auf die Anpassung im Agent Plugin hinausläuft …

Hattest du den Agent von 1.6 nach 2.0 geändert?
Wenn ja evtl. ist das Verhalten mit dem “alten” Agent anders ?

Nein, noch nicht. momentan teste ich 2.0 nur mit einem Klon meiner 1.6 Site. Alle Agenten sind noch 1.6, weil 2.0 noch nicht den nötigen Reifegrad hat. IMHO.
Das Windows_tasks.ps1 Plugin ist praktisch identisch zwischen 1.6 und 2.0 Nur Unterschiede in Kommentarzeilen.
Daher müsste das geänderte Verhalten eigentlich vom checkMK Server verursacht werden.

Ja dies ist meiner Meinung nach ein Bug. Jedenfalls wurde der Check so verändert, dass er jeden Task inventarisiert egal ob aktiv oder nicht. Das macht absolut keinen Sinn.
Jedenfalls aktiv in dem Sinn, dass dort nicht “Disabled” steht. Dumm nur, dass in einem deutschen Windows da nicht “Disabled” steht und somit er inventarisiert wird.

Man könnte aber auch sagen der Bug liegt im windows_tasks.ps1 denn dort wird nur “Aktiviert” nach “Enabled” übersetzt aber nicht die Beschreibung für Deaktiviert :smiley:

Siehe hier

		if ($task.'Status der geplanten Aufgabe' -eq 'Aktiviert'){
			Write-Host "Scheduled Task State `t: Enabled"
		} else {
			Write-Host "Scheduled Task State `t: "$task.'Status der geplanten Aufgabe'
		}
		Write-Host ""

Das Ganze Problem könnte man verhindern wenn das "grauenhafte Powershell Script etwas überarbeitet würde. Denn es gibt durchaus die Möglichkeit auch auf deutschen Systemen hier eine Englische Ausgabe zu erhalten.

So würde mein Vorschlag für ein modernes Task Status Script aussehen.

Write-Host '<<<windows_tasks:sep(124)>>>'
Write-Host 'TaskName|LastRunTime|NextRunTime|LastTaskResult|State|NumberOfMissedRuns'
$tasks = Get-ScheduledTask
$tasks | Where-Object { $_.TaskPath -notlike '\Microsoft\*' } | Get-ScheduledTaskInfo | ForEach-Object {
    $task = $tasks | Where-Object TaskName -eq $_.TaskName
    '{0}|{1}|{2}|{3}|{4}|{5}' -f $_.TaskName, $_.LastRunTime, $_.NextRunTime, $_.LastTaskResult, $task.state, $_.NumberOfMissedRuns
}

Output deutsches Windows


NvBroadcast_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}|19.05.2021 07:30:30||0|Disabled|0
NvProfileUpdaterDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}|11.06.2021 12:25:25|12.06.2021 12:25:25|0|Ready|0

Original Script

TaskName        :  \NvBroadcast_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Last Run Time   :  19.05.2021 07:30:33
Next Run Time   :  Nicht zutreffend
Last Result     :  0
Scheduled Task State    :  Deaktiviert

TaskName        :  \NvDriverUpdateCheckDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
Last Run Time   :  11.06.2021 12:25:12
Next Run Time   :  12.06.2021 12:25:11
Last Result     :  0
Scheduled Task State    : Enabled

Das kleine Powershell Script ist auch deutlich schneller in der Ausführung wie das ausgelieferte.

Für meine Variante müsste man die Parse Funktion noch erweitern welches aber auf Grund der Datenstruktur wesentlich einfacher geht als bisher. List Output ist echt der Hass. :smiley:

1 Like

@andreas-doehler du überraschst mich immer wieder wie schnell du was aus dem Ärmel schüttelst … :vulcan_salute: :trophy:

Naja das sind alles Sachen welche bei mir so rum liegen in der Liste - müsste man mal tun :smiley:
Das im Powershell Script mit der Ausgabe und den Pipes als Trenner würde ich zum Beispiel im Windows zum Default für Agent Plugins machen.
Mit der Überschriftenzeilen bekommst am Ende ein sauberes Dictionary egal was für ein Plugin du hast.
Beim Parsen gibts einfach an welche Spalte im Dict der Key ist für jede Zeile und kannst somit alle Daten mit ein und der selben Funktion verarbeiten.
Ist echt effizient und beim Discovery hast auch automatisch dein Item da du dort einfachst sagst jeder Key im Dict ist ein Item im Check fertig.