M365 neue Service Health und Communications API in Microsoft Graph

Hallo zusammen,

Mit der Nachricht MC275573 hat Microsoft im M365 Message Center angekündigt, dass die alte Service Health und Communication API per 17.12.2021 eingestellt wird und stattdessen die API über Graph benutzt werden kann.

Ich hatte mich mit der alten API https://manage.office.com bereits mal beschäftig gehabt.

Office 365 Service Communications API with Powershell
https://blog.icewolf.ch/archive/2018/01/11/office-365-service-communications-api-with-powershell.aspx

Die Infos zur neuen Graph API von Service Health und Communications findet man hier

Working with service communications API in Microsoft Graph
https://docs.microsoft.com/en-us/graph/api/resources/service-communications-api-overview?view=graph-rest-1.0

Die API bietet Informationen zu

  • Service Health (Dienststatus)
  • Issues (Vorfälle / Hinweise)
  • Messages (Nachrichtencenter)

Wie immer braucht es dazu eine Applikation im Azure AD mit folgenden Permissions

  • ServiceMessage.Read.All
  • ServiceHealth.Read.All

Für die Authentication gegenüber Azure AD nutze ich das PowerShell Module MSAL.PS

Import-Module MSAL.PS
$TenantId = "icewolfch.onmicrosoft.com"
$APPID = "29581967-458b-4c7a-a4f7-03fa440c0e13" #ServiceCommunications
$CertificateThumbprint = "3B42F63204F0F54F6E4CB9CF96E365513C913C2B"

#Roles = "ServiceHealth.Read.All", "ServiceMessage.Read.All"
$ClientCertificate = Get-Item Cert:\CurrentUser\My\$CertificateThumbprint
$Scope = "https://graph.microsoft.com/.default"
$Token = Get-MsalToken -clientID $AppID -ClientCertificate $ClientCertificate -tenantID $tenantID -Scope $Scope
$AccessToken = $Token.AccessToken
$AccessToken

Den JWT Token kann man sich mit https://jwt.ms/ decodieren. Man sieht die beiden Rollen sind zugewiesen.

Service Health Overview

#Healh Overview
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.Value

Service Health für einen bestimmten Service

#Healh Overview "Exchange Online"
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/Exchange Online"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result

Issues

#Issues
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.value
$result.value | where {$_.isResolved -ne $true}
$result.value | where {$_.Service -eq "Exchange Online" -AND $_.isResolved -ne $true}
$result.value | where {$_.status -ne "serviceRestored"}

Derselben Issue ist auch im Admin Center sichtbar

Nachrichtencenter

#Messages
$URI = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages"
$ContentType = "application/json"
$Headers = @{"Authorization" = "Bearer "+ $AccessToken}
$result = Invoke-RestMethod -Method "GET" -Uri $uri -Headers $Headers -ContentType $ContentType
$result.value
$result.value | where {$_.Services -eq "Exchange Online"}
$Messages = $result.value | where {$_.Services -eq "Exchange Online"}
$messages[0]

Auch hier findet man die Nachricht im Nachrichtencenter

Fazit:

Der Zugriff auf das neue API ist eigentlich relativ einfach. Allerdings müssen bisherige Scripte umgebaut werden, da die API nicht mehr ganz gleich funktioniert wie die alte API. Es ist rasch Ende Jahr also so rasch wie möglich daran machen vorhandene Scripte zu aktualisieren

Grüsse
Andres Bohren