Windoes Taskmanager funktioniert nicht richtig

Es wird folgende Meldung angezeigt: Fehler die Aufgabe "{0}" ist nicht mehr vorhanden. Klicken sie auf aktualisieren um die aktuelle Aufgabe anzuzeigen.

Ursache
Windows speichert geplante Aufgaben in der Registry und im Dateisystem. Wenn Einträge in der Registry vorhanden sind und nicht im Dateisystem oder andersherum, dann wird die obige Meldung ausgegeben.

Lösung
Folgendes Powershell-Script ausführen und prüfen welche Einträge im Dateisystem oder in der Registry fehlen. Einträge die nur in der Registry existieren aus dieser löschen. Einträge dir nur im Dateisystem existieren löschen. Danach den PC/Server neu starten. Wenn ein Neustart verhindert werden soll, dann kann mit dem Tool PsExec (von Sysinternals/Microsoft) der Dienst "sheduler" neu gestartet werden.

echo ""
echo "Search tasks in FS that do not exist in registry"
echo "------------------------------------------------"
echo ""

$found = $false
$dir = Get-ChildItem -Path "C:\Windows\System32\Tasks\" -Recurse | where {!$_.PSIsContainer}
foreach ($dirItem in $dir) {
  $dirFullName = $dirItem.FullName
  $regPath = ( $dirItem.FullName -replace "C:\\Windows\\System32\\Tasks", "Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree" )
  if (Test-Path $regPath) {
    #echo "OK: $regPath"
  } else {
    echo "ERROR: $regPath"
    echo "  * File exists: $dirFullName"
    echo "  * Registry key does _NOT_ exist: $regPath"
    $found = $true
  }
}

if (-not $found) {
  echo "No error found!"
}
echo ""

echo ""
echo "Search tasks in registry that do not exist in FS"
echo "------------------------------------------------"
echo ""

$found = $false
$reg = Get-ChildItem -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree" -Recurse
foreach ($regItem in $reg) {
  if ($regItem.SubKeyCount -ne 0) {
    continue
  }

  $key = $regItem.Name
  $keySub = ($key -replace "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree\\", "")
  $path = "C:\Windows\System32\Tasks\${keySub}"

  if (Test-Path $path) {
    # echo "OK: ${key}"
  } else {
    echo "ERROR:"
    echo "  * Registry exists: ${key}"
    echo "  * File does _NOT_ exist: ${path}"
    $found = $true
  }
}

if (-not $found) {
  echo "No error found!"
}
echo ""

Stand: 13.09.2018 - D.Saxen