Compliance-Richtlinien sind unverzichtbar, um sicherzustellen, dass Geraete alle vom Unternehmen festgelegten Anforderungen erfuellen, etwa eine minimale OS-Version. Frueher stellte Microsoft vordefinierte Richtlinien bereit, die genutzt werden konnten. Mit dem Service Release 2208 kam jedoch die Unterstuetzung fuer Custom-Compliance-Pruefungen hinzu, wodurch du die Freiheit erhaeltst, auf dem Geraet alles abzufragen, was du moechtest. In diesem Blogbeitrag konzentrieren wir uns darauf, wie du Custom-Compliance-Richtlinien fuer Windows erstellst.

Inhaltsverzeichnis
Was sind Custom-Compliance-Richtlinien
Compliance-Richtlinien pruefen, ob ein Geraet alle Compliance-Anforderungen deines Unternehmens erfuellt, etwa eine minimale OS-Version. In der Vergangenheit gab es einige vordefinierte Richtlinien von Microsoft, die du verwenden konntest. Mit dem Service Release 2208 wurde die Unterstuetzung fuer Custom-Compliance-Pruefungen hinzugefuegt, mit der du beliebige Dinge auf dem Geraet frei abfragen kannst. Diese Custom-Compliance-Richtlinien werden unter Windows und Linux unterstuetzt. In diesem Blog konzentrieren wir uns auf die Windows-Custom-Compliance-Richtlinien.
Um eine Custom-Compliance-Richtlinie zu erstellen, benoetigst du zwei Dinge: eine JSON-Datei und ein Erkennungsskript. Die JSON-Datei definiert die benutzerdefinierten Einstellungen und die Werte, die als konform gelten. Diese JSON kann ausserdem eine Nachricht fuer den Benutzer enthalten, wie die Compliance wiederhergestellt werden kann. Das Skript fuehrt die Pruefung auf dem Geraet aus und gibt den Wert zurueck, wenn eine Compliance-Richtlinie ausgewertet wird. Das Skript wird ueber den Sidecar-Agent ausgefuehrt.
Wie man ein Compliance-Skript schreibt
Wir unterteilen diesen Abschnitt in zwei Unterthemen: PowerShell und JSON. In diesem Abschnitt zeige ich dir, wie du das PowerShell-Skript und die JSON erstellst, aber ich stelle viele weitere Beispiele in meinem GitHub-Repository bereit.
PowerShell
Im PowerShell-Skript hast du die gesamte Freiheit, die PowerShell dir bietet. Die Ausgabe muss eine JSON sein. Diese Ausgabe-JSON kann mehrere Pruefungen enthalten. Hier ist ein Beispielskript:
$avActive = $false
if(Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct){
$avActive = $true
}
$freeStorage = [math]::Round((Get-PSDrive -Name C).Free / 1024 / 1024 / 1024)
$output = @{ AvActive = $avActive; FreeStorage = $freeStorage}
return $output | ConvertTo-Json -Compress
Dieses Skript prueft, ob ein AV aktiviert ist, und gibt den freien Speicher in GB zurueck.
Json
Die JSON beschreibt, wie mit der Ausgabe umgegangen werden soll. Das ist der kompliziertere Teil, aber gehen wir ihn Schritt fuer Schritt durch. Wenn du mehr Informationen benoetigst, schau dir diesen Link an.
Die JSON ist aus einem Array von Regeln aufgebaut. Wenn du nur eine Regel hast, enthaelt das Array einen einzigen Eintrag, aber wenn du mehrere Rueckgabewerte aus dem Skript hast (wie in unserem Beispiel), kannst du auch mehrere Regeln hinzufuegen.
Jede Regel muss die folgenden Attribute enthalten:
- SettingName: Name des JSON-Tags aus der PowerShell-Ausgabe
- DataType: Der Datentyp der Ausgabe. Moegliche Werte sind: Boolean, Int64, Double, String, DateTime, Version
- Operator: Der Operator fuer die Pruefung. Moegliche Werte sind: IsEquals, NotEquals, GreaterThan, GreaterEquals, LessThan, LessEquals
- MoreInfoURL: Hier kannst du eine URL zu einem Knowledge-Base-Artikel, Blog oder einer Infoseite definieren, wie das Problem geloest werden kann oder wo weitere Informationen zu finden sind.
- RemediationString: Dies ist ein Array von Nachrichten. Du kannst Nachrichten nur in en_US oder in mehreren Sprachen schreiben.
Hier ist die passende JSON fuer unser PowerShell-Skript:
{
"Rules": [
{
"SettingName": "AvActive",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": true,
"MoreInfoUrl": "https://google.com",
"RemediationStrings": [
{
"Language": "en_US",
"Title": "This machine has no active antivirus solution.",
"Description": "To continue to use this device you have to install a Antivirus Solution"
}
]
},
{
"SettingName": "FreeStorage",
"Operator": "GreaterEquals",
"DataType": "int64",
"Operand": 10,
"MoreInfoUrl": "https://google.com",
"RemediationStrings": [
{
"Language": "en_US",
"Title": "No storage free.",
"Description": "The device has less than 10GB storage free. Please run a cleanup"
}
]
}
]
}
Wie man die Richtlinie in Intune definiert
Das Skript hinzufuegen
- Oeffne das Intune Admin Center
- Navigiere zu Devices -> Compliance policies -> Scripts
- Waehle Windows 10 and later

- Gib einen Name ein
- Klicke auf Next

- Kopiere das Skript in das Skriptfeld und entscheide, ob das Skript mit den Anmeldedaten des angemeldeten Benutzers oder im 64-Bit-Kontext ausgefuehrt werden soll
- Klicke auf Next -> Create

Die Compliance-Richtlinie definieren
- Navigiere zu Devices -> Compliance Policies -> New Policy
- Klicke auf +Create policy
- Waehle Windows 10 and later als Platform und klicke auf Create

- Gib einen Namen fuer die Richtlinie ein
- Klicke auf Next

- Waehle Custom Compliance und setze dies auf Required
- Waehle Click to select und waehle das zuvor erstellte Skript
- Klicke auf Select

- Klicke auf das Ordnersymbol, um die Definitions-JSON aus deinem Dateisystem hochzuladen
- Pruefe, ob deine Bedingungen korrekt sind
- Klicke auf Next

- Waehle die Aktion fuer den Fall, dass das Geraet nicht konform ist. Die Standardeinstellung ist, das Geraet als nicht konform zu markieren, aber du kannst zum Beispiel auch eine E-Mail an den Benutzer senden

- Erstelle eine Zuweisung. In meinem Fall ist es all devices
- Klicke auf Next -> Create

Wo finde ich das Repository mit Beispielen
Ich habe ein GitHub-Repository mit einigen Beispielskripten erstellt. Wenn du weitere Ideen fuer Skripte hast oder einen Pull Request erstellen moechtest, melde dich gerne bei mir.


Fits straight to what we need right now! Thanks!
Maybe you like to have look to your GitHub repository and check Check-IfDeviceIsEncrypted. It seems it contains the wrong script.
Thank you for the hint. Was only a naming issue. Is fixed now
Hi Jannik, thanks for this. This is great
How can I add a variable from PowerShell to the description in json? something like below. Whats the right syntax?
“Description”: “The device has only $freestorage. Please run a cleanup to have minimum of 10gb”
Hey Anup, unfortunately this is not possible you can only use static text.
https://learn.microsoft.com/en-us/mem/intune/protect/compliance-custom-json
“”Title”:”BIOS Version needs to be upgraded to at least 2.3. Value discovered was {ActualValue}.”,”