Berichte aus Microsoft 365 mit PowerShell abrufen

Im Admin Center von Microsoft 365 stehen div. Berichte zur Verfügung, zum Beispiel um Statistiken von SharePoint, OneDrive, Teams, Yammer und anderen Diensten auszuwerten. Hier eine Übersicht der verfügbaren Berichte. Die Berichte können mit PowerShell über Microsoft Graph automatisiert abgerufen werden.

Microsoft Graph stellt für den Abruf der Berichte mehrere APIs zur Verfügung. Wie bei Abfragen an Graph üblich muss für die Authentifizierung eine Azure App mit den entsprechenden Berechtigungen (Reports.Read.All) vorhanden sein.

Im Beispiel der Abruf für getSharePointSiteUsageDetail, das eine Auswertung über die Verwendung von SharePoint Sites, und noch andere Daten, zurückgibt.

Admin Center Bericht für SharePoint site usage

1. Die URL definieren woher der Token für die Authentifizierung kommen soll. Es ist die Anmelde-URL von deinem Tenant.
Zusatztipp: Optional solltest du der PowerShell Session vorgeben die Anfrage über TLS 1.2 abzusetzen, sonst könnte es den Abruf vom Anmeldetoken ablehnen. Du kannst es auch ohne der Vorgabe versuchen und, falls der Abruf vom Token nicht erfolgreich ist, es später noch immer angeben.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$AuthUrl = "https://login.microsoftonline.com/[Tenant].onmicrosoft.com/oauth2/v2.0/token"

2. Einen Body mit den Anmeldedaten aus der Azure App definieren. Ersetze die Azure App und Client Secret mit deinen Werten.

$AuthBody = @{
        client_id = [AzureAppID]
	client_secret = [AzureAppClientSecret]
	scope = "https://graph.microsoft.com/.default"
	grant_type = 'client_credentials'
}

3. Den Anmeldetoken abrufen und den Header für die Authentifizierung bilden. Der Token ist nur für eine gewisse Zeit gültig und muss danach neu angefordert werden.

$MSGraphAuthToken = Invoke-RestMethod -Uri $AuthUrl -body $AuthBody -Method POST
$AuthHeader = @{ Authorization = "$($MSGraphAuthToken.token_type) $($MSGraphAuthToken.access_token)" }

4. Abfrage-URL für MSGraph definieren. Hier gibst du an welchen Bericht es abrufen soll.

$RequestUrl = "https://graph.microsoft.com/v1.0/reports/getSharePointSiteUsageDetail(period='D30')"

5. Danach kannst du den Bericht über Microsoft Graph abrufen. Das Ergebnis wird als csv-Export ausgeliefert.

$MSGraphResults = Invoke-RestMethod -Uri $RequestUrl -Headers $AuthHeader -Method Get -ContentType 'application/json; charset=utf-8'

Beachte, im Ergebnis können Umlaute und Sonderzeichen falsch kodiert sein. Hier eine Anleitung um Umlaute nachträglich zu enkodieren.

Share
Avatar photo

Tobias Asböck

Tobias is a Senior System Engineer with more than 10 years of professional experience with Microsoft 365 products such as SharePoint Online, SharePoint Premium, OneDrive for Business, Teams Collaboration, Entra ID, Information Protection, Universal Print, and Microsoft 365 Licensing. He also has 15+ years of experience planning, administering, and operating SharePoint Server environments. Tobias is a PowerShell Scripter with certifications for Microsoft 365 products. In his spare time, Tobias is busy with updates in the Microsoft 365 world or on the road with his road bike and other sports activities. If you have additional questions, please contact me via LinkedIn or [email protected].

Leave a Reply

Your email address will not be published. Required fields are marked *