In einem meiner Beiträge habe ich erklärt, wie du Zuweisungsfilter erstellen und anwenden kannst. Es ist eine sehr leistungsstarke Funktion, um die Zuweisung einer Gruppe zu verfeinern. Du kannst zum Beispiel ein Konfigurationsprofil allen Geräten zuweisen und einen Filter anwenden, um das Konfigurationsprofil nur auf Windows-11-Geräten innerhalb der Gruppe bereitzustellen. Damit dir der Einstieg in Filter leichter fällt, habe ich ein Skript geschrieben, das ein Standard-Set an Filtern erstellt.
Warum ist das für den täglichen Betrieb wichtig? Ohne Filter erstellst du oft für jede Variante einer Zielgruppe eine eigene Azure-AD-Gruppe: eine Gruppe für Windows-11-Geräte, eine für unternehmenseigene Hardware, eine für ein bestimmtes Enrollment-Profil und so weiter. Dieser Ansatz wird schnell schwer zu pflegen, und die Auswertung dynamischer Gruppenmitgliedschaften kann eine Weile dauern.
Filter erlauben dir, eine kleine Anzahl breiter Zuweisungsgruppen zu behalten und den Geltungsbereich erst im Moment der Zuweisung einzugrenzen. Die Auswertung erfolgt auf dem Gerät anhand der aktuellen Eigenschaften. Ein Gerät, das von Windows 10 auf Windows 11 aktualisiert oder mit einem anderen Profil neu registriert wird, landet so automatisch in den richtigen Filtern, ohne dass du Gruppen umbauen musst.

Inhaltsverzeichnis
So stellst du ein Standard-Set an Filtern bereit
Das Skript erstellt die folgenden Filter:
- Ownership-Filter für persönliche und Unternehmensgeräte
- Enrollment-Profil: Liest alle Enrollment-Profile aus und erstellt für jedes davon einen Filter
- Operating System, SKU: Es werden Filter für die folgenden SKUs erstellt: Education, Enterprise, IoTEnterprise, Professional, Holographic
- Operating System Version: Es werden Filter für Windows 8.1, 10 und 11 erstellt
- Device category: Für jede Gerätekategorie in deinem Tenant wird ein Filter erstellt
Wenn du eine Kategorie nicht benötigst, kannst du diese Zeile im Skript auskommentieren.
Ein praktischer Tipp, bevor du das Skript ausführst: Passe die Variable $global:filterPreFix an deine eigene Namenskonvention an. Ein einheitliches Präfix wie MDM- sorgt dafür, dass alle erzeugten Filter im Filters-Blade beieinanderstehen, was sie viel leichter auffindbar macht, wenn du Dutzende davon hast. Das Skript entfernt zudem jeden bestehenden Filter mit demselben Namen, bevor es ihn neu erstellt, sodass du es nach einer Anpassung einer Regel gefahrlos erneut ausführen kannst.
- Lade das Skript aus meinem GitHub-Repository herunter oder kopiere den Code
<#
Version: 1.0
Author: Jannik Reinhard (jannikreinhard.com)
Script: Deploy-DefaultFilter
Description:
Default set on intune filteer
Release notes:
Version 1.0: Init
#>
function Get-GraphAuthentication{
try {
Import-Module Microsoft.Graph.DeviceManagement
} catch {
Install-Module Microsoft.Graph -Scope CurrentUser
Import-Module Microsoft.Graph.DeviceManagement
}
try {
Connect-MgGraph -Scopes "DeviceManagementServiceConfig.Read.All"
} catch {
Write-Error "Failed to connect to MgGraph"
}
Select-MgProfile -Name "beta"
}
function Add-IntuneFilter{
param (
[parameter(Mandatory=$true)]$Name,
[parameter(Mandatory=$true)]$Platform,
[parameter(Mandatory=$true)]$Description,
[parameter(Mandatory=$true)]$Rule
)
Get-MgDeviceManagementAssignmentFilter -Search $Name | ForEach-Object {
Remove-MgDeviceManagementAssignmentFilter -DeviceAndAppManagementAssignmentFilterId $_.Id
}
$params = @{
DisplayName = $filterPreFix + $Name
Description = $Description
Platform = $Platform
Rule = $Rule
RoleScopeTags = @()
}
New-MgDeviceManagementAssignmentFilter -BodyParameter $params
}
#########################################################################################################
############################################ Start ######################################################
#########################################################################################################
$global:filterPreFix = "MDM"
Get-GraphAuthentication
###### Windows 10 ######
# Ownership
Add-IntuneFilter -Name "AllPersonalDevices" -Platform "Windows10AndLater" -Description "All personal W10 and later devices" -Rule '(device.deviceOwnership -eq "Personal")'
Add-IntuneFilter -Name "AllCorporateDevices" -Platform "Windows10AndLater" -Description "All corporate W10 and later devices" -Rule '(device.deviceOwnership -eq "Corporate")'
# Enrollment Profile
Get-MgDeviceManagementWindowAutopilotDeploymentProfile | ForEach-Object {
Add-IntuneFilter -Name ("Enrollment"+($($_.DisplayName).Trim())) -Platform "Windows10AndLater" -Description ("All devcies with enrollment profile"+($($_.DisplayName).Trim())) -Rule ('(device.enrollmentProfileName -eq "'+$($_.DisplayName)+'")' )
}
# Operating System SKU
$sku = @("Education", "Enterprise", "IoTEnterprise", "Professional", "Holographic")
$sku | ForEach-Object {
Add-IntuneFilter -Name "AllSku$_" -Platform "Windows10AndLater" -Description "All devices with SKU $_" -Rule ('(device.operatingSystemSKU -eq "'+$_+'")')
}
# Operating System Version
Add-IntuneFilter -Name "AllWindows11" -Platform "Windows10AndLater" -Description "All Windows 11 devices" -Rule '(device.osVersion -startsWith "10.0.22")'
Add-IntuneFilter -Name "AllWindows10" -Platform "Windows10AndLater" -Description "All Windows 10 devices" -Rule '(device.osVersion -startsWith "10.0.1")'
Add-IntuneFilter -Name "AllWindows8.1" -Platform "Windows10AndLater" -Description "All Windows 8.1 devices" -Rule '(device.osVersion -startsWith "6.3")'
# Device Category
Get-MgDeviceManagementDeviceCategory | ForEach-Object {
Add-IntuneFilter -Name ("Category"+($($_.DisplayName).Trim())) -Description ("All device with category "+($($_.DisplayName).Trim())) -Platform "Windows10AndLater" -Rule ('(device.deviceCategory -eq "'+$($_.DisplayName)+'")' )
}
# Model
Add-IntuneFilter -Name "AllCloudPCs" -Platform "Windows10AndLater" -Description "All Microsoft365 devices" -Rule '(device.model -contains "CloudPC") or (device.model -contains "Cloud PC")'
- Führe das Skript aus
- Öffne das Intune Admin Center
- Navigiere zu Tenant admin > Filters
- Überprüfe deine Filter

Häufige Stolpersteine
Es gibt ein paar Dinge, über die man stolpert, sobald man Filter im größeren Stil einsetzt. Der erste ist das Mischen von Plattformen: Ein Filter ist an eine einzige Plattform gebunden, daher lässt sich eine für Windows10AndLater erstellte Regel nicht auf einer iOS- oder macOS-Zuweisung wiederverwenden. Wenn du mehrere Plattformen verwaltest, plane ein paralleles Set an Filtern für jede ein.
Der zweite Stolperstein ist der Unterschied zwischen Include- und Exclude-Modus. Beim Anhängen eines Filters an eine Zuweisung entscheidest du, ob passende Geräte ein- oder ausgeschlossen werden, und es ist leicht, die Logik versehentlich umzukehren. Teste einen neuen Filter immer zuerst gegen eine kleine Pilotgruppe und nutze die integrierte Vorschau, um genau zu prüfen, welche Geräte zutreffen, bevor du ihn breit ausrollst.
Denke schließlich daran, dass die Geräteeigenschaften, auf die sich ein Filter stützt, nur so aktuell sind wie die Daten, die Intune erfasst hat. Ein Gerät, das sich länger nicht gemeldet hat, spiegelt ein kürzliches OS-Upgrade oder eine Kategorieänderung möglicherweise noch nicht wider. Gib deiner Flotte nach größeren Änderungen also Zeit zum Synchronisieren, bevor du annimmst, dass ein Filter falsch arbeitet.
Fazit
Ich hoffe, dieses Skript hat dir geholfen, mit Zuweisungsfiltern zu starten. Das Skript erstellt ein Standard-Set, mit dem du viele Anforderungen erfüllen kannst. Natürlich wird es nicht alle Anforderungen abdecken, aber es ist wirklich einfach, neue Filter zu erstellen oder bestehende zu erweitern.
Bleib gesund, Cheers
Jannik
Update 02.08.2022
Du kannst mein Skript auch aus der PowerShell Gallery herunterladen:
Install-Script -Name Deploy-DefaultFilter


What PowerShell module or modules does this script require?
Only the Microsoft.Graph.DeviceManagement is required
Thanks! I just ended up installing the Microsoft.Graph package as I realized I didn’t have any of it installed.
Had some issues with the script and I’m not sure if it was just how my system was configured but the scopes in the connect statement were not working. What worked for me was:
Connect-MgGraph -Scopes “DeviceManagementConfiguration.Read.All”,”DeviceManagementConfiguration.ReadWrite.All”,”DeviceManagementManagedDevices.Read.All”,”DeviceManagementManagedDevices.ReadWrite.All”