Hinzufügen und Entfernen von M365 Lizenzen mit Microsoft Graph PowerShell
Hallo zusammen,
Kürzlich habe ich gezeigt, wie man mit dem AzureAD PowerShell Module Lizenzen in M365 hinzufügt und entfernt
Connect-AzureAD
Get-AzureADSubscribedSku
Get-AzureADSubscribedSku | Select -Property Sku*,ConsumedUnits -ExpandProperty PrepaidUnits
Get-AzureADSubscribedSku
Get-AzureADSubscribedSku | Select -Property Sku*,ConsumedUnits -ExpandProperty PrepaidUnits
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_01.jpg)
Die SKU Part Numer ist meist etwas kryptisch. Man schaue deshalb hier nach
https://docs.microsoft.com/en-us/azure/active-directory/enterprise-users/licensing-service-plan-referenceMit dem folgenden Befehl sieht man einfach, die SkuID, den SkuNamen, wieviele Lizenzen man zu gewiesen hat (ConsumedUnits) und wie viele vorhanden sind (Enabled), sowie Suspended und Warning.
Get-AzureADSubscribedSku | Select -Property Sku*,ConsumedUnits -ExpandProperty PrepaidUnits | ft
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_02.jpg)
Nun versuche ich das ganze über das Microsoft Graph PowerShell Module.
Connect-MgGraph -Scopes User.ReadWrite.All, Directory.ReadWrite.All
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_03.jpg)
Da muss der Tenant Admin die Berechtigungen erlauben oder es gibt einen Azure AD Admin Consent Workflow.
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_04.jpg)
Das Problem ist hier die Art wie die Prepaid Units als Property Array aufgeführt sind
Get-MgSubscribedSku
(Get-MgSubscribedSku)[0] | fl
(Get-MgSubscribedSku)[0].PrepaidUnits
(Get-MgSubscribedSku)[0] | fl
(Get-MgSubscribedSku)[0].PrepaidUnits
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_05.jpg)
Um die selbe Darstellung zu erhalten wie bei AzureAD ist ein kleines Script und PSCustomProperty notwendig.
###############################################################################
# SKU's an License with MgGraph and PSCustomObject
###############################################################################
#Array with all needed Properties using PSCustomObject
$ArraySKUS = @()
$SKUS = Get-MgSubscribedSku
Foreach ($SKU in $SKUS)
{
#$ArraySKU = @()
$AppliesTo = $SKU.AppliesTo
$CapabilityStatus = $SKU.CapabilityStatus
$SkuId = $SKU.SkuId
$SkuPartNumber = $SKU.SkuPartNumber
$ConsumedUnits = $SKU.ConsumedUnits
$Enabled = $SKU.PrepaidUnits.Enabled
$Suspended = $SKU.PrepaidUnits.Suspended
$Warning = $SKU.PrepaidUnits.Warning
$SKUObject = [PSCustomObject]@{
AppliesTo = $AppliesTo
CapabilityStatus = $CapabilityStatus
SkuId = $SkuId
SkuPartNumber = $SkuPartNumber
ConsumedUnits = $ConsumedUnits
Enabled = $Enabled
Suspended = $Suspended
Warning = $Warning
}
$ArraySKUS += $SKUObject
}
$ArraySKUS | FT
# SKU's an License with MgGraph and PSCustomObject
###############################################################################
#Array with all needed Properties using PSCustomObject
$ArraySKUS = @()
$SKUS = Get-MgSubscribedSku
Foreach ($SKU in $SKUS)
{
#$ArraySKU = @()
$AppliesTo = $SKU.AppliesTo
$CapabilityStatus = $SKU.CapabilityStatus
$SkuId = $SKU.SkuId
$SkuPartNumber = $SKU.SkuPartNumber
$ConsumedUnits = $SKU.ConsumedUnits
$Enabled = $SKU.PrepaidUnits.Enabled
$Suspended = $SKU.PrepaidUnits.Suspended
$Warning = $SKU.PrepaidUnits.Warning
$SKUObject = [PSCustomObject]@{
AppliesTo = $AppliesTo
CapabilityStatus = $CapabilityStatus
SkuId = $SkuId
SkuPartNumber = $SkuPartNumber
ConsumedUnits = $ConsumedUnits
Enabled = $Enabled
Suspended = $Suspended
Warning = $Warning
}
$ArraySKUS += $SKUObject
}
$ArraySKUS | FT
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_07.jpg)
Beim hunzufügen und entfernen wird mit den SkuID's gearbeitet. Ein bisschen doof finde ich, dass man auch beim entfernen ein leeres Array beim Parameter "Add-Licenses" mitgeben muss. Das selbe gilt natürlich beim hinzufügen, dort wird ein leeres Array beim Parameter "RemoveLicenses" erwartet.
Andererseits ermöglicht das das gleichzeitige hinzufügen und entfernen unterschiedlicher Lizenzen - was durchaus ein Vorteil sein kann.
#Lizenz vom Benutzer anzeigen
Get-MgUserLicenseDetail -UserId m.muster@icewolf.ch
#Lizenz entfernen
Set-MgUserLicense -UserId m.muster@icewolf.ch -AddLicenses @() -RemoveLicenses @('e43b5b99-8dfb-405f-9987-dc307f34bcbd') #PhoneSystem
Set-MgUserLicense -UserId m.muster@icewolf.ch -AddLicenses @{SkuId = 'e43b5b99-8dfb-405f-9987-dc307f34bcbd'} -RemoveLicenses @() #PhoneSystem
![](https://icewolffile.blob.core.windows.net/$web/202111/MGGraph_License_08.jpg)
Liebe Grüsse
Andres Bohren
![](https://icewolffile.blob.core.windows.net/$web/logos/powershell_logo.png)