scloud by Florian Salzmann
ende

Intune Remediation-Skripte lokal testen und debuggen

Wenn ein Proactive Remediation Script nicht wie erwartet funktioniert, testest du es am besten lokal. Das geht viel schneller, als auf den nächsten Sync von Intune zu warten. In diesem Beitrag zeige ich dir, wie ich Intune Remediation-Skripte direkt auf einem Windows-Gerät troubleshoote. Dabei gehe ich auf Skript-Speicherorte, relevante Logs und Registry-Einträge ein. So kannst du genau nachvollziehen, was passiert ist und warum.

Für einige Beispiele und eine Einführung in Remediation-Skripte schau dir das Community-Repo und meinen Blogbeitrag dazu an: Endpoint Analytics Proactive Remediation Community

Speicherort der Skripte auf der Festplatte

Sobald eine Proactive Remediation ausgeführt wird, lädt Intune die Skripte in folgendes Verzeichnis herunter:

C:\Windows\IMECache\HealthScripts

Die Detection- und Remediation-Skripte liegen hier im Klartext. Das bedeutet: Jeder mit Zugriff auf das Gerät kann sie öffnen und lesen. Darum ist es wichtig, niemals Secrets, Credentials oder sensible Daten in diesen Skripten zu speichern.

Du findest dort Unterordner für jede Skript-ID. Darin liegen die Dateien DetectionScript.ps1 und RemediationScript.ps1, die du manuell zum Testen ausführen kannst.

Skripte manuell ausführen

Um ein Skript zu testen, ohne auf Intune zu warten, führe ich es direkt aus dem Cache-Ordner aus:

cd "C:\Windows\IMECache\HealthScripts\<ScriptGUID>"
powershell.exe -ExecutionPolicy Bypass -File .\DetectionScript.ps1

Dieselbe Methode funktioniert auch für die Remediation:

powershell.exe -ExecutionPolicy Bypass -File .\RemediationScript.ps1

So findest du Syntaxfehler oder Probleme, die erst auf dem Zielgerät auftauchen.

Logs prüfen

Die Intune Management Extension schreibt alle Aktivitäten in eine zentralle Log-Datei:

C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log

Ich öffne die Datei meistens mit CMTrace oder Notepad++ und suche nach:

  • Skript-GUID oder -Name
  • ProactiveRemediation
  • Exit Codes (z. B. 0, 1 oder andere Fehler)

So siehst du auf einen Blick, was ausgeführt wurde, was erkannt wurde und ob die Remediation ausgelöst wurde.

Ausführungsstatus in der Registry prüfen

Jede Skriptausführung wird zudem in der Registry protokolliert. Die lokalen Status- und Assignment-Informationen findest du hier:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts

Das hilft dir zu überprüfen, ob das Skript auf dem Gerät bereitgestellt und verarbeitet wurde.

Skript-Output und Ergebnisse abrufen

Wenn dein Skript Werte in die Registry schreibt oder Output-Reporting nutzt, findest du diese hier:

HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts\Reports\

Mit folgendem Skript kannst du diesen Output auslesen:

$User_id = "00000000-0000-0000-0000-000000000000"
$Script_id = "xxx"
$RegPath = "HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts\Reports\$User_id\$Script_id\Result"

Get-ItemProperty -Path $RegPath | Select-Object -ExpandProperty Result | ConvertFrom-Json | fl *Output*

Ersetze $Script_id durch die Action-ID des Skripts. Du findest diese in der URL des Intune Admin Centers, wenn du das Remediation-Skript bearbeitest.

Möchtest du die Outputs aller Remediations auf einen Blick sehen?
Hier ist die Lösung:

$Users_all = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts\Reports"

foreach($User in $Users_all){
    $User.PSChildName
    $Remediations_all = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts\Reports\$($User.PSChildName)"

    foreach($Remediation in $Remediations_all){
        Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts\Reports\$($User.PSChildName)\$($Remediation.PSChildName)\Result" | Select-Object -ExpandProperty Result | ConvertFrom-Json | fl *Output*
    }
}

Besseres Logging einbauen

Beim Erstellen deiner Skripte empfehle ich dir, mit Start-Transcript ein lokales Log zu erzeugen:

Start-Transcript -Path "C:\...\remediation_debug.log"
# script logic
Stop-Transcript

So verstehst du einfacher, was passiert, wenn das Skript als Teil des verwalteten Tasks läuft.

Zusammenfassung

Das lokale Troubleshooting von Intune Proactive Remediation Skripten spart Zeit und reduziert Unsicherheit. Du erhältst volle Einsicht in Skriptdateien, Logs und Registry-Daten. Mit diesem Ansatz kann ich Skripte testen, debuggen und optimieren, bevor ich sie in die Produktion push.