The estimated reading time 5 minutes

Mit PowerShell zu arbeiten kann Spaß machen, speziell wenn man sich in größeren Umgebungen aufhält. Deshalb möchte ich in diesem Artikel einige Standard Anwendungsbeispiele für Exchange Online behandeln, die beinahe jeden Administrator betreffen. Im Artikel werden verschiedene Kombinationen von PowerShell Befehlen gezeigt, natürlich kann man damit noch viel mehr krankes Zeug anstellen, aber ich möchte einfach nur ein paar Basics zeigen. Genug gequatscht, fangen wir an.

Auf die Installation des PowerShell Modules gehe ich nicht groß ein, siehe hierzu der Link von Microsoft .
Hier nochmals kurz mein Setup zur Installation des Modules:

Install-Module -Name ExchangeOnlineManagement -Scope AllUsers -Verbose -Force
Import-Module -Name ExchangeOnlineManagement -Verbose
Get-Module ExchangeOnlineManagement
$creds = Get-Credential
Connect-ExchangeOnline -Credential $creds 
#Connect-ExchangeOnline -Credential $creds -ShowBanner:$false

Nach dem Verbinden (wenn man den Banner nicht abschält) erscheinen die neuen cmdlets in der PowerShell Konsole:

Wie man sehen kann, sind die cmdlets hauptsächlich für Analysezwecke gemacht. Wer gerne eine Auflisten aller cmdlets hätte, kann dies mit folgendem Befehl erledigen.

Get-Module ExchangeOnlineManagement | Select-Object ExportedCommands -ExpandProperty ExportedCommands

Nachdem wir nun verbunden sind, was können wir mit diesen cmdlets überhaupt anfangen? Wir spielen einfach mal etwas mit ihnen.

Get-EXONMailbox references

Mit diesem cmdlet können Informationen zu einzelnen Postfächern abgerufen werden. Zum Thema Propertyset siehe Link.

#1.
#find all mailboxes with "alex" in the following attributes:
#CommonName (CN),DisplayName,FirstName,LastName,Alias
Get-EXOMailbox -Anr alex

#2.
#using different propertysets to get special information
Get-EXOMailbox -PropertySets Quota
#combine different propertysets 
Get-EXOMailbox -PropertySets Quota,Delivery
#combine different propertysets with individual properties
Get-EXOMailbox -PropertySets Quota,Delivery -Properties EmailAddresses,RecipientTypeDetails

#3.
#find users with special attributes
#find all shared mailboxes and their delivery options
Get-EXOMailbox -PropertySets Delivery -Properties RecipientTypeDetails  | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"}  | Sort-Object UserPrincipalName
#find all usermailboxes with their delivery options
Get-EXOMailbox -PropertySets Delivery -Properties RecipientTypeDetails  | Where-Object{$_.RecipientTypeDetails -eq "UserMailbox"}  | Sort-Object UserPrincipalName

Get-EXOCasMailbox

Mit „Get-EXOCasMailbox“ kann man z.B. Verbindungeinstellungen für ein einzelnes Postfach sehen (ist IMAP/POP etc. aktiv) CAS = Client Access Service. LINK zum Propertyset

#1.
#see all mailboxes with their cas settings 
Get-EXOCasMailbox

#2.
#see important information with different propertysets
Get-EXOCasMailbox -PropertySets Minimum
#see all mailboxes IMAP and POP settings
Get-EXOCasMailbox -PropertySets Imap,pop

#3.
#see all users with POP enabled
Get-EXOCasMailbox -PropertySets IMAP,POP | Where-Object {$_.PopEnabled -eq $true}
#see all users with POP and IMAP enabled
Get-EXOCasMailbox -PropertySets IMAP,POP | Where-Object {($_.PopEnabled -eq $true) -and ($_.ImapEnabled -eq $true)}
#see all users OWA enabled
Get-EXOCasMailbox -Properties OWAEnabled| Where-Object {$_.OWAEnabled -eq $true}

Get-EXOMailboxStatistics

Mit diesem cmdlet kann man die Größe von Postfächern anzeigen lassen.

#see mailboxsize of special user 
#UPN,emailaddress,GUID are accepted parameters
Get-EXOMailboxStatistics -Identity alexander
Get-MailboxFolderStatistics -Identity alexander | ft Folderpath,FolderSize 
#see statistics of all users
Get-EXOMailbox | Get-EXOMailboxStatistics
#see statistics of all shared mailboxes
Get-EXOMailbox | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"} | Get-EXOMailboxStatistics
#see detailed statistics of all users
Get-EXOMailbox | Get-EXOMailboxStatistics -PropertySets All

Skript zur Ausgabe des größten Postfaches:

$Mailboxstats = Get-EXOMailbox | Get-EXOMailboxStatistics 
$MailboxStats | Add-Member -MemberType ScriptProperty -Name TotalItemSizeInBytes -Value {$this.TotalItemSize -replace "(.*\()|,| [a-z]*\)", ""} 
$overview = $MailboxStats | Select-Object DisplayName, TotalItemSizeInBytes,@{Name="TotalItemSize (GB)"; Expression={[math]::Round($_.TotalItemSizeInBytes/1GB,2)}} | Sort-Object "TotalItemSize (GB)" -Descending
$overview

Skript zur Ausgabe aller Postfächer größer als ….

#greaterthan value in GB and with "." as comma
$greaterthan = "0.5"
$Mailboxstats = Get-EXOMailbox | Get-EXOMailboxStatistics
$MailboxStats | Add-Member -MemberType ScriptProperty -Name TotalItemSizeInBytes -Value {$this.TotalItemSize -replace "(.*\()|,| [a-z]*\)", ""} 
$overview = $MailboxStats | Select-Object DisplayName,TotalItemSizeInBytes,@{Name="TotalItemSizeInGB"; Expression={[math]::Round($_.TotalItemSizeInBytes/1GB,2)}} | Sort-Object "TotalItemSizeInGB" -Descending
$overview | Where-Object {$_.TotalItemSizeInGB -gt "$greaterthan"}

Skript zur Ausgabe aller Postfächer und der Summe aller Postfächer:

$Mailboxstats = Get-EXOMailbox -ResultSize unlimited | Get-EXOMailboxStatistics 
$MailboxStats | Add-Member -MemberType ScriptProperty -Name TotalItemSizeInBytes -Value {$this.TotalItemSize -replace "(.*\()|,| [a-z]*\)", ""} 
$overview = $MailboxStats | Select-Object DisplayName, TotalItemSizeInBytes,@{Name="TotalItemSizeInGB"; Expression={[math]::Round($_.TotalItemSizeInBytes/1GB,2)}} | Sort-Object "TotalItemSizeInGB" -Descending
$sumtemp = ($overview | Measure-Object TotalItemSizeInGB -Sum).Sum
$sum = $sumtemp.ToString()
$sum = "Sum of all Mailboxes in GB: "+$sum+" GB"
Write-Host "$sum" -ForegroundColor Yellow
$overview

Get-EXOMailboxFolderPermission

Gibt alle Berechtigungen innerhalb eines Postfaches aus.

#1.
#get special permission on one folder (need to know the foldername)
Get-EXOMailboxFolderPermission -Identity alexander:\Inbox

#2.
#get folders from one mailbox with their permissions
$email = "blablabla@it-koehler.com"
$folders = (Get-EXOMailboxFolderStatistics -Identity $email)
$perm = @()
foreach($folder in $folders){#
  $fname = ($folder.Folderpath -replace '/','\') 
  $foldername = $email +":" +$fname
  $temp = Get-EXOMailboxFolderPermission -Identity "$foldername" -ErrorAction SilentlyContinue | Select-Object Identity,User,AccessRights
  $perm += $temp
}
$perm | ft 

Get-EXOMobileDeviceStatistics

Gibt alle mobilen Endgeräte aus, die mit dem Postfach gekoppelt sind.

#1.
#get all mobile devices of one mailbox
Get-EXOMobileDeviceStatistics -Mailbox blablabla@it-koehler.com | ft DeviceFriendlyName,DeviceOS,DeviceID,DeviceImei,FirstSyncTime,LastSuccessSync

#2.
#get all users and show their mobile devices
$UPN = (Get-EXOMailbox -ResultSize unlimited).Userprincipalname 
foreach($user in $UPN){
  $mobiles = Get-EXOMobileDeviceStatistics -Mailbox $user -ErrorAction SilentlyContinue
  if($mobiles){
    Write-Host "User: $user" -ForegroundColor Yellow
    $mobiles | ft DeviceFriendlyName,DeviceOS,DeviceID,DeviceImei,FirstSyncTime,LastSuccessSync
  } 
}

Disconnect-ExchangeOnline

Disconnect-ExchangeOnline -Confirm:$false

Natürlich gibt es noch unzählige weitere Möglichkeiten Auswertungen zu machen, wie schon geschrieben möchte ich hier aber nur auf die Basics eingehen. Wer Fragen/ Anregungen hat kann mir diese gerne in den Kommentaren hierlassen. Wenn euch der Artikel gefallen hat, dann klickt bitte auf „Helpful“. Bis bald.

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no