A default set on assignment Filter

Ein Standard-Set an Zuweisungsfiltern

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.

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.

<#
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
Ein Standard-Set an Zuweisungsfiltern

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

4 thoughts on “Ein Standard-Set an Zuweisungsfiltern

  1. 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”

Comments are closed.