Use Azure Automation for Exchange Online PowerShell Script - Part 2

Hallo zusammen,

Nach dem ersten Teil des Artikels, folgt nun der zweite.

Ich wollte noch ein paar Komponenten dazufügen:

  • Import CSV von einem Azure Storage
  • Ein Logfile erstellen und in Azure Storage abspeichern

Als einfaches Beispiel habe ich das cmdlet Set-CASMailbox genommen, bei dem ein paar Mailboxen über ein CSV exkludiert werden sollten

Zuerst einmal müssen die Variablen für Storage Account und Storage Key erfasst werden. Den Storage Key kann man Encrypted abspeichern.

Diese Variablen lassen sich einfach im Script wieder auslesen

$StorageAccountName = Get-AutomationVariable -Name "StorageAccountName"
"StorageAccountName --> $StorageAccountName"

$StorageAccountKey = Get-AutomationVariable -Name "StorageAccountKey"
"StorageAccounKey --> $StorageAccountKey"

Danach habe ich das ganze Script geschrieben:

"Getting Variables"
$StorageAccountName = Get-AutomationVariable -Name "StorageAccountName"
#"StorageAccountName --> $StorageAccountName"

$StorageAccountKey = Get-AutomationVariable -Name "StorageAccountKey"
#"StorageAccounKey --> $StorageAccountKey"

#Connecting to Exchange Online...
"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

#Create Logfile
$logfile = (get-date).ToString("yyyyMMdd_hhmm") + ".log"
$LogPath = $env:temp + "\$logfile"
Add-Content -Path $LogPath "Starting Script"

#Download CSV from Azure Storage
"Download CSV from AzureStorage"
$DestinationFile = $env:temp + "\CASMailboxExclude.csv"
$StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
Get-AzureStorageFileContent -ShareName "csv" -Path "/CASMailboxExclude.csv" -Context $StorageContext -Destination $DestinationFile

#Import CSV
$CSV = Import-CSV -Path $DestinationFile
$ExcludeArray = $CSV.Email
#"ExcludeArray..."
#$ExcludeArray

#Loop through Mailboxes
$CASMBX = Get-CASMailbox
Foreach ($MBX in $CASMBX)
{
 $Email = $MBX.PrimarySmtpAddress
 #Write-Host "Email: $Email"
    "Email: $Email"
 If ($ExcludeArray -match $Email)
 { 
  #Write-Host "$Email is in the ExcludeArray" -foregroundColor yellow
  "$Email is in the ExcludeArray"

 } else {
  Set-CASMailbox -Identity $Email -PopEnabled $false -ImapEnabled $false -SmtpClientAuthenticationDisabled $true
 }
}

Add-Content -Path $LogPath "Done"

#Upload Logfile
"Upload Logfile to AzureStorage"
Set-AzureStorageFileContent -ShareName "csv" -Path "/$logfile" -Context $StorageContext -Source $LogPath

Wie man sieht, hat das Script POP3, IMAP und SMTPAUTH überall dort deaktiviert, wo es möglich ist.

Und auch die Logfiles wurden auf dem Azure Storage abgelegt.

Grüsse
Andres Bohren