In this post I am going to demostrate how to push Microsoft Health Status to Microsoft Teams using Azure Automation
In this post it is expected you have configured Office 365 Service Communications API. If not, visit this blog post https://www.blogabout.cloud/2020/10/1884/
Configuring Microsoft Teams for Incoming Webhook
Launch Microsoft Teams right click a channel within a Team and select Connectors. Search for Incoming Webhook and click Add
Specify the name of the Webhook and click Create
Make a note of the URL below as you will need this for the PowerShell script later and click Done
Create Automation Account
Launch your Azure Portal and search for Automation Account to create a new account.
– Resource Group
No should be selected for “Create Azure Run As Account” as this is will enable the Account to run against Office 365.
Once the resources has successful created, go into the resource
First of all we need to create a number of variables, these variables will use within the PowerShell script we are going to add to the Runbook.
You will need to add the following variables
– AzO365ServiceHealthApplicationID = Client ID
– AzO365ServiceHealthApplicationKey = Client Secrey
– AzO365TeamsURI = This is the url we created earlier in the post
– AzO365TenantDomain = Tenant ID
If you unsure how to obtain these values, please visit this blog post for more details
We now need to launch Runbooks
Select Create a runbook
– Provide a name
– Runbook Type should equal PowerShell
– Description (is optional)
I am now going to use the following PowerShell script available from GitHub within my Runbook. https://github.com/einast/PS_M365_scripts. This script has been created for the sole purpose of extracting the Microsoft 365 Service Health using the Office Service Communication API, which I demonstrated how to configure in another post.
Under the “User Defined Variables” you will need to edit;
Mintues to reflect the same time as your schedule.
Pushover notifications and Services to monitor as shown below
# ------------------------------------- USER DEFINED VARIABLES ------------------------------------- $ApplicationID = Get-AutomationVariable -Name 'AzO365ServiceHealthApplicationID' $ApplicationKey = Get-AutomationVariable -Name 'AzO365ServiceHealthApplicationKey' $TenantDomain = Get-AutomationVariable -Name 'AzO365TenantDomain' $URI = Get-AutomationVariable -Name 'AzO365TeamsURI' $Minutes = '1440' # Pushover notifications in case Teams is down. # Due to limitations and readability, the script will only send the title of the incident/advisory to Pushover. # COMMENT OUT THIS SECTION IF YOU DON'T WANT TO USE PUSHOVER! #$Pushover = 'yes' # Comment out if you don't want to use Pushover. I use 'yes' for readability. #$PushoverToken = Get-AutomationVariable -Name 'AzO365PushoverToken' # Your API token. Comment out if you don't want to use Pushover #$PushoverUser = Get-AutomationVariable -Name 'AzO365PushoverUser' # User/Group token. Comment out if you don't want to use Pushover #$PushoverURI = 'https://api.pushover.net/1/messages.json' # DO NOT CHANGE! Default Pushover URI. Comment out if you don't want to use Pushover # Service(s) to monitor # Leave the one(s) you DON'T want to check empty (with '' ), add a value in the ones you WANT to check (I added 'yes' for readability) $ExchangeOnline = 'yes' $MicrosoftForms = 'yes' $MicrosoftIntune = 'yes' $MicrosoftKaizala = 'yes' $SkypeforBusiness = 'yes' $MicrosoftDefenderATP = 'yes' $MicrosoftFlow = 'yes' $FlowinMicrosoft365 = 'yes' $MicrosoftTeams = 'yes' $MobileDeviceManagementforOffice365 = 'yes' $OfficeClientApplications = 'yes' $Officefortheweb = 'yes' $OneDriveforBusiness = 'yes' $IdentityService = 'yes' $Office365Portal = 'yes' $OfficeSubscription = 'yes' $Planner = 'yes' $PowerApps = 'yes' $PowerAppsinMicrosoft365 = 'yes' $PowerBI = 'yes' $AzureInformationProtection = 'yes' $SharePointOnline = 'yes' $MicrosoftStaffHub = 'yes' $YammerEnterprise = 'yes' # Classification(s) to monitor # Leave the one(s) you DON'T want to check empty (with '' ), add a value in the ones you WANT to check (I added 'yes' for readability) $Incident = 'yes' $Advisory = 'yes' # ------------------------------------- END OF USER DEFINED VARIABLES -------------------------------------
You will now need to define a schedule within the Runbook for it to execute.
Once you have done all of the above, you will receive a nice notification in Microsoft Teams about the Service Health Status
In my next article I will show how simple it is too trigger this Runbook using Power Automate.
The Author – Blogabout.Cloud