Office 365 Dienste Report für Microsoft Partner

Office 365 Dienste Report
Office 365 Dienste Report

In diesem Beitrag möchte ich euch zeigen, wie man einen Office 365 Dienste Report erstellen kann. Also welche Dienste einer Office 365 Lizenz wirklich aktiviert sind und vom Benutzer genutzt werden können. Ab und zu gibt es ja das Szenario, dass man einen Onboarding Prozess für die Benutzer hat und die einzelnen Office 365 Dienste erst danach zur Verfügung stehen sollen.

Das Besondere an diesem Beispiel ist, dass wir als Microsoft Partner mehrere Kunden in die Cloud heben und den Office 365 Dienste Report gerne automatisch über alle unserer Kunden-Tenants ausführen möchten. In der Regel haben wir als „delegierter Administrator“ Zugriff auf die Kunden-Tenants. Dann wäre es natürlich sehr hilfreich, wenn wir uns nicht an jedem Kunden-Tenant auf irgendeine Form anmelden müssten, um die Informationen abrufen zu können. Und genau das funktioniert über den „delegierten Administrator“. Darf mein Benutzer im eigenen Microsoft Partner-Tenant die Berechtigung als „delegierter Administrator“ nutzen, muss ich mir nur einmal an meinem eigenen Partner-Tenant anmelden und habe Zugriff auf alle anderen registrierten Kunden-Tenants.

Für dieses Beispiel nutze ich das MSOnline Modul. Die Installation und grundlegende Nutzung findet sich bei Microsoft.

Noch ein paar kurze Erläuterungen zu dem unten aufgeführten PowerShell Skript:

  • Zeile 11: Hier wird genau eine SKU spezifiziert. Nachdem unterschiedliche SKUs unterschiedliche Services beinhalten, vereinfacht dies die Ausgabe als CSV Datei
  • Zeile 13: Hier erfolgt die Authentifizierung gegen den eigenen Microsoft Partner-Tenant
  • Zeile 18: Hier werden alle Tenants zurückgegeben, auf die ich als „delegierter Administrator“ Zugriff habe
  • Zeile 21 & 42: Diese Befehle unterscheiden sich nur an dem Parameter TenantId zu den Befehlen, die ohne „delegierter Administrator“ Berechtigung genutzt werden können
<#  
.SYNOPSIS 
    Script that reports Office 365 licenses and services across all tenants with delegated admin access for a specific SKU.
.NOTES 
    The script are provided “AS IS” with no guarantees, no warranties, and they confer no rights.     
#>

# The Output will be written to this file 
$logFile = "C:\Temp\Office_365_Licenses.csv" 
# The SKU of the license to be checked
$skuPartNumber = "O365_BUSINESS_PREMIUM"
 
# Connect to Microsoft Online 
Connect-MsolService  
 
Write-Host "Connected to Office 365..." 
$headerAdded = $false

$allTenants = Get-MsolPartnerContract
foreach ($tenant in $allTenants) {
    # Get a list of all licences that exist within the tenant 
    $licensetype = Get-MsolAccountSku -TenantId $tenant.TenantId | Where-Object { $_.ConsumedUnits -ge 1 } 
 
    # Loop through all licence types found in the tenant 
    foreach ($license in $licensetype) {
        # Report only if SKUs are equal   
        if ($license.SkuPartNumber -eq $skuPartNumber) {   
            # Build and write the Header for the CSV file 
            $headerstring = "TenantName,DisplayName,UserPrincipalName,AccountSku" 
     
            foreach ($row in $($license.ServiceStatus)) { 
                $headerstring = ($headerstring + "," + $row.ServicePlan.servicename) 
            } 
            # Add header only one time
            if (!$headerAdded) {
                Out-File -FilePath $logFile -InputObject $headerstring -Encoding UTF8 -append 
                $headerAdded = $true
            }
     
            Write-Host ("Gathering users with the following subscription: " + $license.accountskuid) 
 
            # Gather users for this particular AccountSku 
            $users = Get-MsolUser -all -TenantId $tenant.TenantId | Where-Object { $_.isLicensed -eq "True" -and $_.Licenses.AccountSkuId -contains $license.accountskuid } 
 
            # Loop through all users and write them to the CSV file 
            foreach ($user in $users) { 
                write-host ("Processing " + $user.Displayname) 
                $thislicense = $user.Licenses | Where-Object { $_.AccountSkuId -eq $license.accountskuid } 
                $datastring = ($tenant.Name + "," + $user.Displayname + "," + $user.Userprincipalname + "," + $license.SkuPartNumber) 
                foreach ($row in $($thislicense.Servicestatus)) { 
                    # Build data string 
                    $datastring = ($datastring + "," + $($row.provisioningstatus)) 
                } 
                Out-File -FilePath $logFile -InputObject $datastring -Encoding UTF8 -append 
            } 
        }
    }             
}
Write-Host ("Script Completed.  Results available in " + $logFile)

Das Skript erstellt eine CSV-Datei die dann z.B. in Microsoft Excel weiter verarbeitet werden kann.

Das Skript ist natürlich nur ein Beispiel und hat definitiv Verbesserungspotential. Und natürlich geschieht der Einsatz des Skriptes auf eigene Gefahr und soll eher als Denkanstoß gesehen werden.

Schreibe einen Kommentar