The Office 365 Service Communications API provides information about Microsoft 365 service status for your tenant including service messages. I built a little PowerShell module to access the API with PowerShell cmdlets. In this post I want to show you some examples which help you to use the API.

PowerShell Module

I built a PowerShell module to access Microsoft 365 service status details natively with PowerShell. The PowerShell module and documentation is available on the PowerShell Gallery and on GitHub.

Before using the module an app registration is required. Setup instructions are also provided on GitHub.

Module

CI/CD

By leveraging Azure DevOps I created a build and release pipeline which automatically builds the PowerShell module with Plaster.

Builds are only created if the commit on GitHub includes a version tag. This version tag gets automatically populated to the module manifest.

The build artifact gets then automatically published to the PowerShell Gallery as a new version. Furthermore, a new GitHub release including the module artifact is added to the project.

This process fully automates the publishing and build process for the module. For local development and maintenance, the module can also be built with Invoke-Build.

Log Analytics Workbook

Another thing I tried out was a little workbook for my log analytics workspace which displays status information of the services.

To ingest the logs to the log analytics workspace I built a little logic app that retrieves the service status periodically and ingests the logs to the workspace.

Note:

  • If you would use the logic app in production better store the app registration details in azure key vault

Logic App to forward Microsoft Service status

The workbook looks like this and provides a nice dashboard:

Log Analytics Workbook Service Status

I truncated the output to only include specific services. Here’s the KQL query I used to render the cards:

1
2
3
4
5
6
7
ServiceStatus_CL
| where TimeGenerated between(ago(8h) .. now())
| extend Service = service_s
| extend Status = status_s
| where Service in ('Microsoft Teams', 'Microsoft Defender ATP', 'Microsoft Intune', 'Exchange Online', 'SharePoint Online', 'Microsoft 365 suite', 'OneDrive for Business', 'Office Client Applications')
| summarize arg_max(TimeGenerated, *) by Service
| project TimeGenerated, Service, Status

Closing notes

I hope this post provided you some inspiration to build automation and dashboards in the area of Microsoft 365 service status. You could now create automated notifications for all new service status messages and post them to teams or send notification emails. Or simply display the status of the services in your existing IT infrastructure status dashboard.

You can find a full documentation about the API in the Office 365 Service Communications API reference.