Skip to content

Office 365 Lizenzen per Skript ändern

Office 365 Lizenzen per Skript ändern

Im Office 365 Admin Center lassen sich Lizenzen bequem per Mausklick ändern. Allerdings immer nur für einen User auf einmal. Die Änderung von Lizenzen für eine ganze Masse an Usern kann sehr aufwändig und umständlich sein.

Eine Änderung der Lizenzen per Powershell Skript kann für eine größere Zahl an Usern der einfachere und schnellere Weg sein.

 

Voraussetzungen

Zunächst benötigt man das „Microsoft Azure Active Directory Module for Windows PowerShell“

 

Installation

Powershell als Administrator ausführen
Install-Module -Name MsOnline

Ggf. wird der „Microsoft Online Services Sign-In Assistant“ benötigt, falls für die entsprechenden Accounts MFA aktiviert ist. (Achtung!! Bei der Verwendung von Proxy Servern kann es zu Problemen mit der Authentifizierung kommen!)

 

Lizenzen zuweisen

Connection

Connect-MsolService
Anmeldung mit entsprechenden Credentails
 

Übersicht über die vorhandenen Lizenztypen

Am Besten verschafft man sich zunächst einen Überblick über die vorhandenen Lizenztypen. Mit dem cmdlet get-MsolAccountSku bekommt man eine Übersicht über die vorhandenen Lizenztypen.

 

20190702-104404

Hierbei stellt man sofort fest, dass der erste Teil der Lizenzbezeichnung dem Tenantnamen entspricht.

 

Beispiel:

XYglobal:SPE_E3 in Powershell entspricht im Office 365 Admin Center des XYglobal Tenants der Microsoft 365 E3 Lizenz

Nun gilt es die richtige Lizenz zu finden. Hier kann die Anzahl der ActiveUnits und ConsumedUnits ein guter Anhaltspunkt sein. So lassen sich die Lizenzen gut mit den „ausgeschriebenen“ Namen aus dem Admin Center vergleichen

 

Region

Um einem User eine Lizenz zuweisen zu können, muss zunächst die Region des Users bzw. der Lizenz festgelegt werden. Hierzu verwendet man das Set-MsolUser cmdlet.

Beispiel:

  Set-MsolUser -UserPrincipalName T.Mustermann@YourDomain.com -UsageLocation "DE"

Hier wird dem User Mustermann die UsageLocation Deutschland hinzugefügt.

Tipp: Wurde der User per Azure AD Connect Sync angelegt, ist dieser Wert möglicherweise schon in dem MsolUser Attribut „Country“ vorhanden und kann für die UsageLocation verwendet werden:

  $msolUser = Get-MsolUser -UserPrincipalName $user.UserPrincipalName
  If ($msolUser.UsageLocation -eq "") {
      Set-MsolUser -UserPrincipalName $msolUser.UserPrincipalName -UsageLocation $msolUser.Country
  }

 

Lizenzen zuweisen/entfernen

Um einem User nun eine Lizenz zuzuweisen, verwendet man nun folgendes cmdlet:

  Set-MsolUserLicense -UserPrincipalName T.Mustermann@YourDomain.com -AddLicenses "YourTenant:SPE_E3"

Um eine Lizenz zu entfernen verwendet man entsprechend:

  Set-MsolUserLicense -UserPrincipalName T.Mustermann@YourDomain.com -RemoveLicenses "YourTenant:ENTERPRISEPACK"

Um mehrere Lizenzen hinzuzufügen bzw. zu entfernen werden die entsprechenden Lizenzbezeichnungen einfach mit einem , getrennt nacheinander aufgelistet:

   Set-MsolUserLicense -UserPrincipalName T.Mustermann@YourDomain.com -AddLicenses "YourTenant:SPE_E3", "YourTenant:VISIOCLIENT"

 

Lizenzoptionen

In manchen Fällen ergibt es Sinn nicht alle Services, die in einem Lizenztyp enthalten sind, auch für einen User zu aktivieren. Hierzu stellt das Set-MsolUserLicense cmdlet den Parameter -LicenseOptions bereit. Um diesen verwenden zu können, müssen wir allerdings zunächst die ServicePlan Bezeichnungen einer Lizenz kennen.

Diese bekommen wir mit folgendem cmdlet:

  (Get-MsolAccountSku | where {$_.AccountSkuId -eq 'LizenzName'}).ServiceStatus

Beispiel für die Lizenz XYglobal:SPE_E3 (Microsoft 365 E3):

  (Get-MsolAccountSku | where {$_.AccountSkuId -eq 'XYglobal:SPE_E3'}).ServiceStatus

Ergebnis:

20190702-130317

 

Nun müssen wir alle Services, die wir nicht bereitstellen wollen, in einer Variable vom Typ MsolLicenseOptions auflisten. Wollen wir z.B. auf die Services Yammer und Exchange Online verzichten, würde die Lizenzoption wie folgt aussehen:

  $myLicOpt = New-MsolLicenseOptions -AccountSkuId "YourTenant:SPE_E3" -DisabledPlans "YAMMER_ENTERPRISE","EXCHANGE_S_ENTERPRISE"

Um einem User nun eine Lizenz vom Typ Microsoft 365 E3 zuzuweisen, und dabei auf die Dienste Yammer und Exchange Online zu verzichten, verwenden wir folgende cmdlets:

  $myLicOpt = New-MsolLicenseOptions -AccountSkuId "YourTenant:SPE_E3" -DisabledPlans "YAMMER_ENTERPRISE","EXCHANGE_S_ENTERPRISE"
  Set-MsolUserLicense -UserPrincipalName T.Mustermann@YourDomain.com -AddLicenses "YourTenant:SPE_E3" -LicenseOptions $myLicOpt

 

Bearbeitung mehrerer User

Möchte man nun einen bestimmten Task für mehrere User ausführen, bietet uns Powershell viele Möglichkeiten. Eine davon besteht darin, mit einer Liste von Usern zu arbeiten.

Hierzu legen wir eine CSV Datei an. Die Überschrift für diese CSV könnte z.B. „UserPrincipalName“ sein. Dann listen wir untereinander die UPN's der einzelnen User auf, für die wir eine Aktion ausführen wollen.

  UserPrincipalName
  T.Mustermann@YourDomain.com

Um diese CSV nun nutzen zu können, importieren wir sie mit dem cmdlet: Import-Csv

 

Beispiel:

  # User Import
  $users = Import-Csv -Path C:\Temp\O365User.csv

Nun nutzen wir eine einfache „foreach“ Schleife um jeden User zu bearbeiten:

  # User Import
  $users = Import-Csv -Path C:\Temp\O365User.csv
  foreach ($user in $users) {
  ...
  }

Beispiel XY AG- Jeder User in der O365User.csv bekommt eine Microsoft 365 E3 Lizenz (ohne Yammer und Exchange Online) zugewiesen und die alten Lizenzen Office 365 E3 und Enterprise Mobility and Security werden entfernt:

  # Lizenzoptionen festlegen
  $myLicOpt = New-MsolLicenseOptions -AccountSkuId "XYglobal:SPE_E3" -DisabledPlans "YAMMER_ENTERPRISE","EXCHANGE_S_ENTERPRISE"
  
  # User Import
  $users = Import-Csv -Path C:\Temp\O365User.csv
  
  foreach ($user in $users) {
      # MsolUser laden
      $msolUser = Get-MsolUser -UserPrincipalName $user.UserPrincipalName
      
      If ($msolUser.UsageLocation -eq "") {
          # Wenn Region noch nicht gesetzt dann mit dem Attribut Country füllen
          Set-MsolUser -UserPrincipalName $msolUser.UserPrincipalName -UsageLocation $msolUser.Country
      }    
      
      # Neue Lizenz (mit Optionen) setzen und alte Lizenzen entfernen
      Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -AddLicenses "XYglobal:SPE_E3" -LicenseOptions $myLicOpt -RemoveLicenses "XYglobal:ENTERPRISEPACK", "XYglobal:EMS"   
  }

Tipp: Ungültige Lizenzkombinationen, z.B. eine Microsoft 365 E3 (mit Sharepoint Plan 2) zusammmen mit einer einzelnen Sharepoint Plan 1 Lizenz, werden von Azure nicht akzeptiert. In einem solchen Fall wird die ungültige Lizenzkombi nicht zugewiesen.

 

Quellen:

https://docs.microsoft.com/de-de/office365/enterprise/powershell/view-account-license-and-service-details-with-office-365-powershell
 
https://docs.microsoft.com/de-de/office365/enterprise/powershell/connect-to-office-365-powershell
 
https://docs.microsoft.com/en-us/powershell/azure/active-directory/overview?view=azureadps-1.0

 

Autor: Patrick Gilcher