Entfernen von Microsoft 365-Lizenzen aus Benutzerkonten mit PowerShell

Dieser Artikel gilt sowohl für Microsoft 365 Enterprise als auch für Office 365 Enterprise.

Hinweis

Erfahren Sie, wie Sie Lizenzen aus Benutzerkonten mit dem Microsoft 365 Admin Center entfernen. Eine Liste zusätzlicher Ressourcen finden Sie unter Verwalten von Benutzern und Gruppen.

Verwenden des Microsoft Graph PowerShell SDK

Stellen Sie zunächst eine Verbindung mit Ihrem Microsoft 365-Mandanten her.

Zum Zuweisen und Entfernen von Lizenzen für einen Benutzer ist der Berechtigungsbereich "User.ReadWrite.All" oder eine der anderen Berechtigungen erforderlich, die auf der Referenzseite "Lizenz zuweisen" Graph-API aufgeführt sind.

Der Berechtigungsbereich "Organization.Read.All" ist erforderlich, um die im Mandanten verfügbaren Lizenzen zu lesen.

Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All

Informationen zum Lizenzierungsplan in Ihrer Organisation finden Sie in den folgenden Themen:

Entfernen von Lizenzen aus Benutzerkonten

Verwenden Sie die folgende Syntax, um Lizenzen von einem vorhandenen Benutzerkonto zu entfernen:

Set-MgUserLicense -UserId "<Account>" -RemoveLicenses @("<AccountSkuId1>") -AddLicenses @{}

In diesem Beispiel wird der Lizenzierungsplan für SPE_E5 (Microsoft 365 E5) vom Benutzer BelindaN@litwareinc.com entfernt:

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
Set-MgUserLicense -UserId "belindan@litwareinc.com" -RemoveLicenses @($e5Sku.SkuId) -AddLicenses @{}

Verwenden Sie die folgende Syntax, um alle Lizenzen aus einer Gruppe vorhandener lizenzierter Benutzer zu entfernen:

$licensedUsers = Get-MgUser -Filter 'assignedLicenses/$count ne 0' `
    -ConsistencyLevel eventual -CountVariable licensedUserCount -All `
    -Select UserPrincipalName,DisplayName,AssignedLicenses

foreach($user in $licensedUsers)
{
    $licencesToRemove = $user.AssignedLicenses | Select -ExpandProperty SkuId
    $user = Set-MgUserLicense -UserId $user.UserPrincipalName -RemoveLicenses $licencesToRemove -AddLicenses @{} 
}

Eine andere Möglichkeit zum Freigeben einer Lizenz besteht im Löschen des Benutzerkontos. Weitere Informationen finden Sie unter Löschen und Wiederherstellen von Benutzerkonten mit PowerShell.

Verwenden der Azure Active Directory PowerShell für Graph-Module

Das cmdlet Set-AzureADUserLicense soll eingestellt werden. Migrieren Sie Ihre Skripts wie oben beschrieben zum Set-MgUserLicense Cmdlet des Microsoft Graph SDK. Weitere Informationen finden Sie unter Migrieren Ihrer Apps für den Zugriff auf die Lizenzverwaltungs-APIs von Microsoft Graph.

Stellen Sie zunächst eine Verbindung mit Ihrem Microsoft 365-Mandanten her.

Listen Sie als Nächstes die Lizenzpläne für Ihren Mandanten mit diesem Befehl auf.

Get-AzureADSubscribedSku | Select SkuPartNumber

Rufen Sie als Nächstes den Anmeldenamen des Kontos ab, für das Sie eine Lizenz entfernen möchten, auch als Benutzerprinzipalname (USER Principal Name, UPN) bezeichnet.

Geben Sie abschließend die Namen der Benutzeranmeldung und des Lizenzplans an, entfernen Sie die Zeichen "<" und ">", und führen Sie diese Befehle aus.

$userUPN="<user sign-in name (UPN)>"
$planName="<license plan name from the list of license plans>"
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$license.RemoveLicenses = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $planName -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $license

Um alle Lizenzen für ein bestimmtes Benutzerkonto zu entfernen, geben Sie den Namen der Benutzeranmeldung an, entfernen Sie die Zeichen "<" und ">", und führen Sie diese Befehle aus.

$userUPN="<user sign-in name (UPN)>"
$userList = Get-AzureADUser -ObjectID $userUPN
$Skus = $userList | Select -ExpandProperty AssignedLicenses | Select SkuID
if($userList.Count -ne 0) {
    if($Skus -is [array])
    {
        $licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
        for ($i=0; $i -lt $Skus.Count; $i++) {
            $licenses.RemoveLicenses +=  (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus[$i].SkuId -EQ).SkuID   
        }
        Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
    } else {
        $licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
        $licenses.RemoveLicenses =  (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus.SkuId -EQ).SkuID
        Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
    }
}

Verwenden des Microsoft Azure Active Directory-Moduls für Windows PowerShell

Hinweis

Die cmdlets Set-MsolUserLicense und New-MsolUser (-LicenseAssignment) sollen eingestellt werden. Migrieren Sie Ihre Skripts wie oben beschrieben zum Set-MgUserLicense Cmdlet des Microsoft Graph SDK. Weitere Informationen finden Sie unter Migrieren Ihrer Apps für den Zugriff auf die Lizenzverwaltungs-APIs von Microsoft Graph.

Stellen Sie zunächst eine Verbindung mit Ihrem Microsoft 365-Mandanten her.

Informationen zum Lizenzierungsplan (AccountSkuID) in Ihrer Organisation finden Sie in den folgenden Themen:

Bei Verwendung des Get-MsolUser-Cmdlets ohne den -All-Parameter werden nur die ersten 500 Konten zurückgegeben.

Entfernen von Lizenzen aus Benutzerkonten

Verwenden Sie die folgende Syntax, um Lizenzen von einem vorhandenen Benutzerkonto zu entfernen:

Set-MsolUserLicense -UserPrincipalName <Account> -RemoveLicenses "<AccountSkuId1>", "<AccountSkuId2>"...

Hinweis

PowerShell Core unterstützt nicht das Microsoft Azure Active Directory-Modul für Windows PowerShell und Cmdlets mit Msol im Namen. Um diese Cmdlets weiterhin verwenden zu können, müssen Sie sie über Windows PowerShell ausführen.

In diesem Beispiel wird die lizenz litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) aus dem Benutzerkonto BelindaN@litwareinc.com entfernt.

Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -RemoveLicenses "litwareinc:ENTERPRISEPACK"

Hinweis

Sie können das Set-MsolUserLicense Cmdlet nicht verwenden, um die Zuweisung von Benutzern von stornierten Lizenzen aufzuheben. Sie müssen dies für jedes Benutzerkonto im Microsoft 365 Admin Center einzeln ausführen.

Verwenden Sie eine der folgenden Methoden, um alle Lizenzen aus einer Gruppe vorhandener lizenzierter Benutzer zu entfernen:

  • Filtern der Konten basierend auf einem vorhandenen Kontoattribut Verwenden Sie dazu die folgende Syntax:
$userArray = Get-MsolUser -All <FilterableAttributes> | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}

In diesem Beispiel werden alle Lizenzen aus allen Benutzerkonten in der Vertriebsabteilung im USA entfernt.

$userArray = Get-MsolUser -All -Department "Sales" -UsageLocation "US" | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}
  • Verwenden einer Liste bestimmter Konten für eine bestimmte Lizenz Führen Sie dazu die folgenden Schritte aus:
  1. Erstellen und speichern Sie eine Textdatei wie die folgende, die in jeder Zeile ein Konto enthält:
akol@contoso.com
tjohnston@contoso.com
kakers@contoso.com
  1. Verwenden Sie folgende Syntax:
$x=Get-Content "<FileNameAndPath>"
for ($i=0; $i -lt $x.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $x[$i] -RemoveLicenses "<AccountSkuId1>","<AccountSkuId2>"...
}

In diesem Beispiel wird die lizenz litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) aus den Benutzerkonten entfernt, die in der Textdatei "C:\My Documents\Accounts.txt" definiert sind.

$x=Get-Content "C:\My Documents\Accounts.txt"
for ($i=0; $i -lt $x.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $x[$i] -RemoveLicenses "litwareinc:ENTERPRISEPACK"
}

Verwenden Sie die folgende Syntax, um alle Lizenzen aus allen vorhandenen Benutzerkonten zu entfernen:

$userArray = Get-MsolUser -All | where {$_.isLicensed -eq $true}
for ($i=0; $i -lt $userArray.Count; $i++)
{
Set-MsolUserLicense -UserPrincipalName $userArray[$i].UserPrincipalName -RemoveLicenses $userArray[$i].licenses.accountskuid
}

Eine andere Möglichkeit zum Freigeben einer Lizenz besteht im Löschen des Benutzerkontos. Weitere Informationen finden Sie unter Löschen und Wiederherstellen von Benutzerkonten mit PowerShell.

Siehe auch

Verwalten von Microsoft 365-Benutzerkonten, -Lizenzen und -Gruppen mit PowerShell

Verwalten von Microsoft 365 mit PowerShell

Erste Schritte mit PowerShell für Microsoft 365