Mit den Proactive Remediation Skripten bietet der Endpoint Manager eine hervorragende Art, Problemen proaktiv entgegenzuwirken oder Task in einem Intervall durchzuführen. Leider steht die Funktion aber nur mit einer Enterprise Lizenz (Windows 10/11 E3/5 A3/5) zur Verfügung. Da ich viele Umgebungen betreue, die mit "Microsoft 365 Business Premium" lizenziert sind, habe ich mir ein Script "Proactive Remediation for Business" aufgebaut. Mit diesem kann ich die meisten Funktionalitäten, die uns die Proactive Remediations bieten, abdecken.

Table of Contents

Erklärung

Das Script erstellt einen Scheduled Task, der die Funktion des Intervalls der "Proactive Remediation" Funktion übernimmt. Für den Task habe ich die Funktionen "Einmalig", "Stündlich", "Täglich" und "AtLogon" eingebaut. Je nachdem, welchen Trigger du wählst, kannst du auch das Intervall genauer definieren.
Ob die Ausführung des Tasks als User oder System sein soll, kannst du in der Verteilung wählen. Beides wird unterstützt.

Die Definition kannst du im oberen Bereich des Installation-Scripts (install.ps1) machen:

##########################################################################
#   Recurence Data
##########################################################################

$Schedule_Frequency = "Daily"       # Once, Hourly, Daily, AtLogon
$Schedule_RepeatInterval = "7"      # Number            (for Daily and Hourly)
$Schedule_StartDate = "2023-01-30"  # YYYY.MM.DD        (for Once)
$Schedule_StartTime = "8am"		# ex 8am / 5pm		(for Once, Hourly, Daily)
Code language: PowerShell (powershell)

Verteilst du das Script erstellt dieses den Task wie von dir definiert und legt das Detection und Remediation Script lokal auf dem Gerät ab. Zudem Speicher es sich selbst im selben Ordner mit dem angegebenen Paketnamen ab.
Wird das Script dann durch den Scheduled Task angestossen, bemerk es, dass bereits ein Task vorhanden ist und stösst das Detection-Script (detection.ps1) an. Erkennt dieses etwas, so wird auch gleich das Remediation-Script (remediation.ps1) ausgeführt.

Vorbereitung

Für das Beispiel hier verwende ich eine "Proactive Remediation" Logik, welche doppelt vorhandene Verknüpfungen wie beispielsweise "Teams - Copy.lnk" auf dem Desktop erkennt und löscht.

Möchtest du nun deine eigene Detection und Remediation verteilen, musst du folgende Passagen im Script und Paket anpassen:

$PackageNameHier gibst du dem Paket einen Namen. Dieser wird sowohl für das Log, den Scheduled Task als auch für den Namen des Scripts auf dem Gerät verwendet.
Achte also darauf, dass du den Namen eindeutig wählst. Das ist vor allem wichtig, wenn du mehrere Pakete verteilen möchtest.
$VersionDie Version ermöglicht dir später das Paket zu updateten.
Recurence DataDas Intervall beziehungsweise die Trigger definierst du im oberen Teil des Scripts, wie bereits in der Erklärung aufgezeigt.
detection.ps1Dieses File kannst du mit deinem Detection-Script ersetzten. Wichtig ist, dass es bei einer Erkennung mit dem Exit Code 1 beendet wird.
remediation.ps1Auch dieses File tauschst du aus. Dieses Mal mit deiner Remediation Logik.
check.ps1Diese Datei musst du nur bei einem Update die Version anpassen.

Weitere Anpassungen im Script oder dem Paket musst du nicht machen. Eine zusätzliche Anpassung ist nur nötig, falls du eine neue Version verteilen möchtest. Dafür musst du dann die Versionsnummer in der zweiten Zeile im "install.ps1" sowie "check.ps1" erhöhen.

Proactive Remediation, win32 App erstellen

Hast du die Vorbereitungen gemäss dem Schritt oben abgeschlossen, musst du das Paket nur noch in ein "Intunewin"-File verwandeln und im Endpoint Manager / Intune erfassen.

Für die Erstellung des "Intunewin"-File habe ich dir hier eine Anleitung: Win32 App / .intunewin erstellen

Hast du das File, kannst du im Endpoint Manager unter «Apps > Windows apps» ein Win32 App erstellen und das File hochladen. Gib dem Paket einen aussagekräftigen Namen, eine Beschreibung und einen Herausgeber:

In den Programmeinstellungen kannst du die Ausführung als "System" oder "User" wählen, dies je nachdem welche Anforderungen deine Detection hat. Als Installations- sowie Deinstallationsbefehl kannst du immer die nachstehenden hinterlegen.
Die Requirements im darauffolgenden Schritt sind nicht sehr relevant, müssen aber gesetzt werden.

Install command%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -executionpolicy bypass -command .\install.ps1
Uninstall command%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -executionpolicy bypass -command .\uninstall.ps1

Als Detection Rule wählst du als "custom detection script" das "check.ps1" File aus.

Die Abhängigkeiten sowie Supersedence kannst du überspringen.
Schlussendlich musst du die App nur noch einer Ziel-Gruppe zuweisen und abwarten, bis diese installiert ist.

Proactive Remediation, win32 App updaten

Hast du bereits ein App verteilt und möchtest entweder das Intervall der Prüfung, das Detection- oder Remediation-Script anpassen?
Das kannst du ganz einfach, indem du dieselben Schritte wie bei der initialen Erstellung durchgehst.
Wichtig ist aber, dass du die Versionsnummer anpasst. Dies musst du sowohl im "install.ps" als auch im "check.ps1" machen.
Hast du dann das ".intunewin"-File erstellt, kannst du dieses im bestehenden Win32 App im Endpoint Manager hochladen. Die Einstellungen kannst du alle belassen, nur noch die neue Erkennungsregel (check.ps1) hochladen und fertig.