Zuweisen von Microsoft 365-Lizenzen zu Benutzerkonten mit PowerShell

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

Benutzer können keine Microsoft 365-Dienste nutzen, bis ihrem Konto eine Lizenz aus einem Lizenzierungsplan zugewiesen wurde. Sie können PowerShell verwenden, um Lizenzen schnell nicht lizenzierten Konten zuzuweisen.

Benutzerkonten muss zunächst ein Standort zugewiesen werden. Die Angabe eines Speicherorts ist ein erforderlicher Bestandteil des Erstellens eines neuen Benutzerkontos im Microsoft 365 Admin Center.

Für Konten, die von Ihrem lokales Active Directory Domain Services synchronisiert werden, ist standardmäßig kein Speicherort angegeben. Sie können einen Speicherort für diese Konten über folgendes konfigurieren:

  • Das Microsoft 365 Admin Center
  • PowerShell
  • Die Azure-Portal (Active Directory-Benutzerkonto>>>Profil>Kontaktinformationen>Land oder Region).

Verwenden des Microsoft Graph PowerShell SDK

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

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

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

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

Führen Sie den Get-MgSubscribedSku Befehl aus, um die verfügbaren Lizenzierungspläne und die Anzahl der verfügbaren Lizenzen in jedem Plan in Ihrer Organisation anzuzeigen. Die Anzahl der verfügbaren Lizenzen in jedem Plan ist ActiveUnits - WarningUnits - ConsumedUnits. Weitere Informationen zu Lizenzierungsplänen, Lizenzen und Diensten finden Sie unter Anzeigen von Lizenzen und Diensten mit PowerShell.

Führen Sie diesen Befehl aus, um die nicht lizenzierten Konten in Ihrer Organisation zu finden.

Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All

Führen Sie diesen Befehl aus, um die nicht lizenzierten synchronisierten Benutzer in Ihrer Organisation zu finden.

Get-MgUser -Filter 'assignedLicenses/$count eq 0 and OnPremisesSyncEnabled eq true' -ConsistencyLevel eventual -CountVariable unlicensedUserCount -All -Select UserPrincipalName

Sie können Lizenzen nur Benutzerkonten zuweisen, für die die UsageLocation-Eigenschaft auf einen gültigen ISO 3166-1 Alpha-2-Ländercode festgelegt ist. „US" steht zum Beispiel für die Vereinigten Staaten und „FR" für Frankreich. Einige Microsoft 365-Dienste sind in bestimmten Ländern nicht verfügbar. Weitere Informationen finden Sie unter Informationen zu Lizenzbeschränkungen.

Führen Sie diesen Befehl aus, um Konten zu finden, die keinen UsageLocation-Wert aufweisen.

Get-MgUser -Select Id,DisplayName,Mail,UserPrincipalName,UsageLocation,UserType | where { $_.UsageLocation -eq $null -and $_.UserType -eq 'Member' }

Führen Sie diesen Befehl aus, um den UsageLocation-Wert für ein Konto festzulegen.

$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"

Update-MgUser -UserId $userUPN -UsageLocation $userLoc

Beispiel:

Update-MgUser -UserId "belindan@litwareinc.com" -UsageLocation US

Wenn Sie das Cmdlet Get-MgUser verwenden, ohne den Parameter -All zu verwenden, werden nur die ersten 100 Konten zurückgegeben.

Zuweisen von Lizenzen zu Benutzerkonten

Um einem Benutzer eine Lizenz zuzuweisen, verwenden Sie den folgenden Befehl in PowerShell.

Set-MgUserLicense -UserId $userUPN -AddLicenses @{SkuId = "<SkuId>"} -RemoveLicenses @()

In diesem Beispiel wird dem nicht lizenzierten Benutzer belindan@litwareinc.comeine Lizenz aus dem SPE_E5-Lizenzierungsplan (Microsoft 365 E5) zugewiesen:

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

In diesem Beispiel werden dem Benutzer belindan@litwareinc.comSPE_E5 (Microsoft 365 E5) und EMSPREMIUM (ENTERPRISE MOBILITY + SECURITY E5) zugewiesen:

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$e5EmsSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'EMSPREMIUM'
$addLicenses = @(
    @{SkuId = $e5Sku.SkuId},
    @{SkuId = $e5EmsSku.SkuId}
)

Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()

In diesem Beispiel wird SPE_E5 (Microsoft 365 E5) zugewiesen, wobei die Dienste MICROSOFTBOOKINGS (Microsoft Bookings) und LOCKBOX_ENTERPRISE (Kunden-Lockbox) deaktiviert sind:

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$disabledPlans = $e5Sku.ServicePlans | `
    Where ServicePlanName -in ("LOCKBOX_ENTERPRISE", "MICROSOFTBOOKINGS") | `
    Select -ExpandProperty ServicePlanId

$addLicenses = @(
    @{
        SkuId = $e5Sku.SkuId
        DisabledPlans = $disabledPlans
    }
)

Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()

In diesem Beispiel wird ein Benutzer mit SPE_E5 (Microsoft 365 E5) aktualisiert und die Sway- und Forms-Dienstpläne deaktiviert, während die vorhandenen deaktivierten Pläne des Benutzers im aktuellen Zustand bleiben:

$userLicense = Get-MgUserLicenseDetail -UserId "belinda@litwareinc.com"
$userDisabledPlans = $userLicense.ServicePlans | `
    Where ProvisioningStatus -eq "Disabled" | `
    Select -ExpandProperty ServicePlanId

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'
$newDisabledPlans = $e5Sku.ServicePlans | `
    Where ServicePlanName -in ("SWAY", "FORMS_PLAN_E5") | `
    Select -ExpandProperty ServicePlanId

$disabledPlans = ($userDisabledPlans + $newDisabledPlans) | Select -Unique

$addLicenses = @(
    @{
        SkuId = $e5Sku.SkuId
        DisabledPlans = $disabledPlans
    }
)

Set-MgUserLicense -UserId "belinda@litwareinc.com" -AddLicenses $addLicenses -RemoveLicenses @()

In diesem Beispiel wird ein Benutzer mit SPE_E5 (Microsoft 365 E5) aktualisiert und die Sway- und Forms-Dienstpläne deaktiviert, während die vorhandenen deaktivierten Pläne des Benutzers in allen anderen Abonnements im aktuellen Zustand verbleiben:

$userLicense = Get-MgUserLicenseDetail -UserId belinda@litwareinc.com

$userDisabledPlans = $userLicense.ServicePlans | Where-Object ProvisioningStatus -eq "Disabled" | Select -ExpandProperty ServicePlanId

$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'

$newDisabledPlans = $e5Sku.ServicePlans | Where ServicePlanName -in ("SWAY", "FORMS_PLAN_E5") | Select -ExpandProperty ServicePlanId

$disabledPlans = ($userDisabledPlans + $newDisabledPlans) | Select -Unique

$result=@()
$allPlans = $e5Sku.ServicePlans | Select -ExpandProperty ServicePlanId

foreach($disabledPlan in $disabledPlans)
{
    foreach($allPlan in $allPlans)
    {
        if($disabledPlan -eq $allPlan)
        {
            $property = @{
                Disabled = $disabledPlan
            }
        }
     }
     $result += New-Object psobject -Property $property
}


$finalDisabled = $result | Select-Object -ExpandProperty Disabled


$addLicenses = @(
    @{
        SkuId = $e5Sku.SkuId
        DisabledPlans = $finalDisabled
    }
)


Set-MgUserLicense -UserId belinda@litwareinc.com -AddLicenses $addLicenses -RemoveLicenses @()

Zuweisen von Lizenzen zu einem Benutzer durch Kopieren der Lizenzzuweisung von einem anderen Benutzer

In diesem Beispiel wird mit demselben Lizenzierungsplan zugewiesen jamesp@litwareinc.com , der auf belindan@litwareinc.comangewendet wurde:

$mgUser = Get-MgUser -UserId "belindan@litwareinc.com" -Property AssignedLicenses
Set-MgUserLicense -UserId "jamesp@litwareinc.com" -AddLicenses $mgUser.AssignedLicenses -RemoveLicenses @()

Verschieben eines Benutzers in ein anderes Abonnement (Lizenzplan)

In diesem Beispiel wird ein Benutzer vom SPE_E3-Lizenzierungsplan (Microsoft 365 E3) auf den SPE_E5-Lizenzierungsplan (Microsoft 365 E5) aktualisiert:

$e3Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E3'
$e5Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'SPE_E5'

# Unassign E3
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{} -RemoveLicenses @($e3Sku.SkuId)
# Assign E5
Set-MgUserLicense -UserId "belindan@litwareinc.com" -AddLicenses @{SkuId = $e5Sku.SkuId} -RemoveLicenses @()

Sie können die Änderung des Abonnements für das Benutzerkonto mit diesem Befehl überprüfen.

Get-MgUserLicenseDetail -UserId "belindan@litwareinc.com"

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

Hinweis

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, dem Sie eine Lizenz hinzufügen möchten, auch als Benutzerprinzipalname (UPN) bezeichnet.

Stellen Sie als Nächstes sicher, dass dem Benutzerkonto ein Nutzungsspeicherort zugewiesen ist.

Get-AzureADUser -ObjectID <user sign-in name (UPN)> | Select DisplayName, UsageLocation

Wenn kein Nutzungsspeicherort zugewiesen ist, können Sie einen mit den folgenden Befehlen zuweisen:

$userUPN="<user sign-in name (UPN)>"
$userLoc="<ISO 3166-1 alpha-2 country code>"
Set-AzureADUser -ObjectID $userUPN -UsageLocation $userLoc

Geben Sie abschließend den Benutzeranmeldungsnamen und den Lizenzplannamen an, 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.AssignedLicense
$License.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $planName -EQ).SkuID
$LicensesToAssign = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$LicensesToAssign.AddLicenses = $License
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $LicensesToAssign

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.

Führen Sie den Get-MsolAccountSku Befehl aus, um die verfügbaren Lizenzierungspläne und die Anzahl der verfügbaren Lizenzen in jedem Plan in Ihrer Organisation anzuzeigen. Die Anzahl der verfügbaren Lizenzen in jedem Plan ist ActiveUnits - WarningUnits - ConsumedUnits. Weitere Informationen zu Lizenzierungsplänen, Lizenzen und Diensten finden Sie unter Anzeigen von Lizenzen und Diensten mit PowerShell.

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.

Führen Sie diesen Befehl aus, um die nicht lizenzierten Konten in Ihrer Organisation zu finden.

Get-MsolUser -All -UnlicensedUsersOnly

Sie können Lizenzen nur Benutzerkonten zuweisen, für die die UsageLocation-Eigenschaft auf einen gültigen ISO 3166-1 Alpha-2-Ländercode festgelegt ist. „US" steht zum Beispiel für die Vereinigten Staaten und „FR" für Frankreich. Einige Microsoft 365-Dienste sind in bestimmten Ländern nicht verfügbar. Weitere Informationen finden Sie unter Informationen zu Lizenzbeschränkungen.

Führen Sie diesen Befehl aus, um Konten zu finden, die keinen UsageLocation-Wert aufweisen.

Get-MsolUser -All | where {$_.UsageLocation -eq $null}

Führen Sie diesen Befehl aus, um den UsageLocation-Wert für ein Konto festzulegen.

Set-MsolUser -UserPrincipalName "<Account>" -UsageLocation <CountryCode>

Beispiel:

Set-MsolUser -UserPrincipalName "belindan@litwareinc.com" -UsageLocation US

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

Zuweisen von Lizenzen zu Benutzerkonten

Um einem Benutzer eine Lizenz zuzuweisen, verwenden Sie den folgenden Befehl in PowerShell.

Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"

In diesem Beispiel wird dem nicht lizenzierten Benutzer belindan@litwareinc.comeine Lizenz aus dem Lizenzierungsplan litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) zugewiesen:

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

Führen Sie diesen Befehl aus, um allen nicht lizenzierten Benutzern eine Lizenz zuzuweisen.

Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>] | Set-MsolUserLicense -AddLicenses "<AccountSkuId>"

Hinweis

Sie können einem Benutzer nicht mehrere Lizenzen aus dem gleichen Lizenzierungsplan zuweisen. Wenn Sie nicht über genügend verfügbare Lizenzen verfügen, werden die Lizenzen den Benutzern in der Reihenfolge zugewiesen, in der sie von dem Get-MsolUser-Cmdlet zurückgegeben werden, bis alle Lizenzen vergeben sind.

In diesem Beispiel werden allen nicht lizenzierten Benutzern Lizenzen aus dem Lizenzierungsplan litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) zugewiesen:

Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

In diesem Beispiel werden diese Lizenzen nicht lizenzierten Benutzern in der Vertriebsabteilung im USA zugewiesen:

Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

Verschieben eines Benutzers in ein anderes Abonnement (Lizenzplan) mit dem Azure Active Directory PowerShell für Graph-Modul

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

Rufen Sie als Nächstes den Anmeldenamen des Benutzerkontos ab, für das Sie abonnements wechseln möchten, auch als Benutzerprinzipalname (UPN) bezeichnet.

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

Get-AzureADSubscribedSku | Select SkuPartNumber

Listen Sie als Nächstes mit diesen Befehlen die Abonnements auf, über die das Benutzerkonto derzeit verfügt.

$userUPN="<user account UPN>"
$licensePlanList = Get-AzureADSubscribedSku
$userList = Get-AzureADUser -ObjectID $userUPN | Select -ExpandProperty AssignedLicenses | Select SkuID 
$userList | ForEach { $sku=$_.SkuId ; $licensePlanList | ForEach { If ( $sku -eq $_.ObjectId.substring($_.ObjectId.length - 36, 36) ) { Write-Host $_.SkuPartNumber } } }

Identifizieren Sie das Abonnement, über das der Benutzer derzeit verfügt (das FROM-Abonnement) und das Abonnement, in das der Benutzer verschoben wird (das TO-Abonnement).

Geben Sie abschließend die To- und FROM-Abonnementnamen (SKU-Teilenummern) an, und führen Sie diese Befehle aus.

$subscriptionFrom="<SKU part number of the current subscription>"
$subscriptionTo="<SKU part number of the new subscription>"
# Unassign
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.RemoveLicenses =  (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $subscriptionFrom -EQ).SkuID
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
# Assign
$license.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value $subscriptionTo -EQ).SkuID
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenses.AddLicenses = $License
Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses

Sie können die Änderung des Abonnements für das Benutzerkonto mit diesen Befehlen überprüfen.

$licensePlanList = Get-AzureADSubscribedSku
$userList = Get-AzureADUser -ObjectID $userUPN | Select -ExpandProperty AssignedLicenses | Select SkuID 
$userList | ForEach { $sku=$_.SkuId ; $licensePlanList | ForEach { If ( $sku -eq $_.ObjectId.substring($_.ObjectId.length - 36, 36) ) { Write-Host $_.SkuPartNumber } } }

Siehe auch

Verwalten von Benutzerkonten, Lizenzen und Gruppen mit PowerShell

Verwalten von Microsoft 365 mit PowerShell

Erste Schritte mit PowerShell für Microsoft 365

Verwenden des Microsoft Graph-Benutzers: assignLicense- und subscribedSku-APIs