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.
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.