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!)

    Download: https://www.microsoft.com/en-US/download/details.aspx?id=28177

     

    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:

     
     

     

    Autor: Patrick Gilcher