Lizenzen mit dem Microsoft Graph PowerShell SDK zuweisen

Wie weist man Office/Microsoft 365 Lizenzen mit dem Graph PowerShell Modul (Microsoft Graph PowerShell SDK) zu?

Durch die Abkündigung des Azure AD PowerShell Moduls sind Office 365 Kunden unter Umständen gezwungen, viele bestehende Scripte zu aktualisieren:

Migrate your apps to access the license managements APIs from Microsoft Graph – Microsoft Tech Community

Hier wird als konkretes Datum der 30.06.2022 genannt. Ab diesem Zeitpunkt gibt es keine Sicherheitsupdates mehr. Ein einfaches Beispiel ist ein Lizenzscript, welches alle Kunden benötigen, die gruppenbasierte Lizensierung nicht nutzen können. Dies könnte zum Beispiel der Fall sein, wenn keine Azure AD Premium P1 Lizenzen verfügbar sind oder eigene automatisierte Bestellprozesse etabliert sind, welche die Nutzung dieser Funktion unmöglich machen.

Ich hatte vor kurzem exakt diesen Fall – und die Lizenz bei einigen hunderten Benutzern händisch zuweisen wollte ich nicht. Also habe ich das Microsoft Graph PowerShell SDK bemüht. Das hieraus entstandene kurze Script kann als Vorlage für standardisierte Lizenzzuweisungen dienen. Vor der Inbetriebnahme im eigenen Betrieb muss folgendes eventuell angepasst werden (die entsprechenden Zeilen sind hervorgehoben):

  • Der zugewiesene Lizenztyp ist Exchange Online Plan 1. Ersetzt dies in Zeile 2 durch die benötigte korrekte Lizenz.
  • Es werden alle Benutzer lizensiert, die Mitglied der Gruppe users-o365 sind. Ersetzt diesen Namen durch eine andere beliebige passende Gruppe in Zeile 6. Diese Gruppe muss im Azure AD verfügbar sein.

Das fertige Script:

Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All,Directory.ReadWrite.All
$ExOPlan1 = Get-MgSubscribedSku | where SkuPartnumber -eq "EXCHANGESTANDARD"

#Set UsageLocation for all users that have none
Get-MgUser -All | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }  | %{Update-MgUser -UserId $_.UserPrincipalName -UsageLocation "DE" }
$licgroup = Get-MgGroup -Filter "Displayname eq 'users-o365'"

Get-MgGroupMember -GroupId $licgroup.Id -All| %{((Get-MgUser -UserId $_.Id).UserPrincipalName); Set-MgUserLicense -UserId ((Get-MgUser -UserId $_.Id).UserPrincipalName) -AddLicenses @{SkuId = $ExOPlan1.SkuId} -RemoveLicenses @()} 

Code-Sprache: PowerShell (powershell)

Das Schwierigste an der obigen Scriptentwicklung war das jeweilige Herausfinden welche ID man als Parameter benötigt. Die Graph PowerShell SDK benötigt oft (im Gegensatz zur herkömmlichen Windows PowerShell) nicht den Namen eines zu suchenden Objekts, sondern eben die ID, objectID oder ähnliches.

Das fertige Script gibt es natürlich auf GitHub zum Download.

Published by Andreas

Gründer von M365 Evangelists Cloud-Architekt, Strategieberater, Consultant für Microsoft Technologien Graph API Enthusiast, PowerShell Enthusiast