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 nicht lizenzierten Konten schnell Lizenzen zuzuweisen.

Benutzerkonten muss zuerst ein Speicherort zugewiesen werden. Das Angeben eines Speicherorts ist ein erforderlicher Teil des Erstellens eines neuen Benutzerkontos im Microsoft 365 Admin Center.

Für Konten, die von Ihren lokalen Active Directory-Domänendiensten synchronisiert werden, ist standardmäßig kein Speicherort angegeben. Sie können einen Speicherort für diese Konten konfigurieren:

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

Hinweis

Erfahren Sie, wie Sie Benutzerkonten mit dem Microsoft 365 Admin Center Lizenzen zuweisen. 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 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-Graph -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

Sie können Benutzerkonten, für die die UsageLocation-Eigenschaft auf einen gültigen ISO 3166-1 Alpha-2-Ländercode festgelegt ist, nur Lizenzen zuweisen. „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 haben.

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

Zum Beispiel:

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

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

Zuweisen von Lizenzen zu Benutzerkonten

Verwenden Sie den folgenden Befehl in PowerShell, um einem Benutzer eine Lizenz zuzuweisen.

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

In diesem Beispiel wird dem nicht lizenzierten Benutzer belindan@litwareinc.com eine Lizenz aus dem Lizenzierungsplan für SPE_E5 (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.com SPE_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 Formulardienstpläne deaktiviert, während die vorhandenen deaktivierten Pläne des Benutzers im aktuellen Zustand bleiben:

$userLicense = Get-MgUserLicenseDetail -UserId "belinda@fdoau.onmicrosoft.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.onmicrosoft.com" -AddLicenses $addLicenses -RemoveLicenses @()

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

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

$mgUser = Get-MgUser -UserId "belindan@litwareinc.com"
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 Lizenzierungsplan für SPE_E3 (Microsoft 365 E3) auf den Lizenzierungsplan für SPE_E5 (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 @()

Mit diesem Befehl können Sie die Änderung des Abonnements für das Benutzerkonto ü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 (USER Principal Name, UPN) bezeichnet.

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

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

Wenn kein Verwendungsspeicherort 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 schließlich den Namen der Benutzeranmeldung 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 Benutzerkonten, für die die UsageLocation-Eigenschaft auf einen gültigen ISO 3166-1 Alpha-2-Ländercode festgelegt ist, nur Lizenzen zuweisen. „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 haben.

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>

Zum 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

Verwenden Sie den folgenden Befehl in PowerShell, um einem Benutzer eine Lizenz zuzuweisen.

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

In diesem Beispiel wird dem nicht lizenzierten Benutzer belindan@litwareinc.com eine 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 den nicht lizenzierten Benutzern in der Vertriebsabteilung in den USA dieselben Lizenzen 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 (USER Principal Name, 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 die Abonnements auf, über die das Benutzerkonto derzeit verfügt, mit diesen Befehlen.

$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 wechselt (das TO-Abonnement).

Geben Sie abschließend die Namen des Abonnements "AN" und "FROM" (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

Mit diesen Befehlen können Sie die Änderung des Abonnements für das Benutzerkonto ü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 } } }

Weitere Informationen

Verwalten von Benutzerkonten, Lizenzen und Gruppen mit PowerShell

Verwalten von Microsoft 365 mit PowerShell

Erste Schritte mit PowerShell für Microsoft 365