Use Azure Automation for Exchange Online PowerShell Script - Part 1

Hallo zusammen,

Stellt euch mal folgendes Szenario vor:

Ein Kunde hat einen Microsoft 365 Tenant und Cloud Only Identities. Es gibt also keine OnPrem Active Directory und Exchange Server mehr, auf welchen noch irgendwelche Scripts für die Automatisierung oder regelmässige Scripts für Exchange Online laufen könnten.

Ich habe mir mal Azure Automation angeschaut und versucht damit ein Script gegen Exchange Online laufen zu lassen.

Als erstes muss man einen Azure Automation Service erstellen

Der Automation Account braucht einen Namen, eine Subscription und eine ResourceGroup

Das erstellen vom RunAsAccount ist fehlgeschlagen (weil ich im AzureAD mit meinem Benutzer keine Rechte habe eine Azure AD Application anzulegen)

Der Automation Account wurde jedoch erstellt und drei Demo Runbooks noch dazu

Der RunAsAccount kann dann erstellt werden, wenn man genügend Rechte im AzureAD hat (Application Administrator müsste da eigentlich genügen. Ich hatte mir jedoch die Global Admin Permissions gegeben).

Schaut man sich nun die Azure AD Applikation an, so braucht die natürlich noch ein paar Rechte um auf Exchange zugreifen zu dürfen

Wie man zur  "Exchange.ManageAsApp" Berechtigung kommt, habe ich im folgenden Artikel beschrieben.

Exchange Online PowerShell V2 Authentication with App in AzureAD (Update)
https://blog.icewolf.ch/archive/2021/04/04/exchange-online-powershell-v2-authentication-with-app-in-azuread-update.aspx

Im Privileged Identity Management (PIM) habe ich der App noch die "Exchange Administrator" Rechte permanent verliehen.

Zurück zum Azure Automation Account. Ich schaue mir mal das PowerShell Beispiel genauer an

Mit dem Klick auf "Edit" kommt man zum Quellcode vom Script

Klickt man dann auf die "Test pane"

Kann das Script mit dem "Play" Button ausgeführt werden.

Da ich ja ein PowerShell Script für Exchange Online ausführen will, brauche ich noch das entsprechende PowerShell Module. Dazu wählt man links in der Navigation "Modules" aus, und wählt dann "Browse Gallery".

Dort kann man dann nach dem gewünschten Modul suchen. In meinem Fall "ExchangeOnlineManagement"

Das Modul wird dann importiert

Nun bin ich bereit, mein eigenes Runbook anzulegen

Das Runbook benötigt einen Namen und einen Typ (Programmiersprache)

Ich habe ein kleines Script geschrieben, welche sich über die Azure Application und einem Zertifikat (Wird vom RunAsAccount automatisch erstellt) mit Exchange Online verbindet.

"Check Module"
$Module = Get-Module -Name ExchangeOnlineManagement -ListAvailable
If ($Module -eq $Null)
{
    "ExchangeOnlineManagement Module not installed"
else {
    "ExchangeOnlineManagement Module found"
}


"Connecting to Exchange Online..."
$connection = Get-AutomationConnection –Name AzureRunAsConnection
$tenant = "icewolfch.onmicrosoft.com"
Connect-ExchangeOnline –CertificateThumbprint $connection.CertificateThumbprint –AppId $connection.ApplicationID –ShowBanner:$false –Organization $tenant

"Getting Mailboxes..."
$MBX = Get-Mailbox
$MBX | ft DisplayName, PrimarySMTPAddress

"Done"

Nun kann das Script gestartet werden. Wie man sieht hat es funktioniert

Zum Schluss muss das Script noch Publiziert werden.

Grüsse
Andres Bohren