The estimated reading time 5 minutes

Viele Kunden fragen mich, ob es möglich ist eine Übersicht über die aktuellen Postfachgrößen aus Exchange Online zubekommen. Natürlich sage ich dann, “ja das ist mit PowerShell möglich”. Aus diesem Grund habe ich ein kleines PowerShell Skript geschrieben, welches eine CSV Datei erstellt mit folgenden Daten: Postfachgröße und verbundene Active Sync Geräte also Handys. Damit ist es ebenfalls möglich die mobilen Geräte inklusive Betriebssystem und Uhrzeit, wann diese zum ersten Mal hinzugefügt wurden zu erkennen.
Die CSV-Datei sieht dann folgendermaßen aus:

Die CSV-Datei kann jeder Zeit auch in Excel importiert und sortiert werden. Das komplette Skript befindet sich am Ende des Artikels.

Bevor es losgehen kann, muss eine Verbindung zu Exchange Online per PowerShell aufgebaut werden. Wer nicht genau weiß wie das geht, hier ein früherer Artikel zum Thema Exchange Online PowerShell Tutorial.

Für die Faulen unter euch, hier nochmals kurz zusammengefasst (für den Teil -Scope AllUsers werden Adminrechte benötigt):

#install module for all users on pc (once)
Install-Module ExchangeOnlineManagement # -Verbose -Scope AllUsers -Force
#import module 
Import-Module ExchangeOnlineManagement 
#connecto to exchange online (admin credentials needed)
Connect-ExchangeOnline 

Nach der erfolgreichen Verbindung zu Exchange Online sollte es möglich sein Befehle gegen Exchange Online auszuführen.
Für das Skript benötigt ihr natürlich noch einen Pfad, wo die Ausgabedatei abgelegt werden soll (Linie 3)

[string]$timestamp = (Get-Date -Format yyyy-MM-dd-HH-mm) 
###### insert path to csv export
$csvpath = "C:\temp\exon-stats-$timestamp.csv"
######

Auf Grund der Ausgabe muss noch die Variable $mbstats als Array deklariert werden, außerdem müssen alle Postfächer in die Variable $mbs eingelesen werden.

#see statistics of mailboxes
$mbs = Get-Mailbox -ResultSize Unlimited | Sort-Object name
#create an array for all statistics
$mbstats = @()

Nun haben wir alle Postfächer in der Variablen $mbs und gehen dann mit einer Foreach Schleife durch jedes einzelne durch.

foreach($mb in $mbs){
  $dn = (($mb).identity)
  $activesync = (Get-CASMailbox -Identity "$dn").hasactivesyncdevicepartnership
  if ($activesync -eq $true){
    #fetching active sync device information
    $activesyndevice = Get-MobileDevice -Mailbox "$dn" | Select-Object DeviceType,DeviceOS,DeviceUserAgent,WhenCreated
    $devicemodel = @()
    $devicemodel = ($activesyndevice) | Select-Object DeviceType -ExpandProperty DeviceType 
    $devicemodel = $devicemodel -join '||' 
    $deviceos = @()
    $deviceos = ($activesyndevice) | Select-Object DeviceOS -ExpandProperty DeviceOS 
    $deviceos = $deviceos -join '||'
    $deviceuagent = @()
    $deviceuagent =  ($activesyndevice) | Select-Object DeviceUserAgent -ExpandProperty DeviceUserAgent
    $deviceuagent = $deviceuagent -join '||'
    $devicecreated = @()
    $devicecreated = ($activesyndevice) | Select-Object WhenCreated -ExpandProperty WhenCreated
    $devicecreated = $devicecreated -join '||'
    #putting everything together (active sync devices and mailbox statistics)
    $mbstat = Get-Mailbox -Identity "$dn" | Get-MailboxStatistics | Select-Object DisplayName,MailboxGuid,`
    @{name="TotalItemSize (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},`
    ItemCount,@{name="ActiveSync";expression={"True"}}, @{name="DeviceType";expression={"$devicemodel"}},@{name="DeviceOS";expression={"$deviceos"}},`
    @{name="DeviceAgent";expression={"$deviceuagent"}},@{name="DeviceFirstConnected";expression={"$devicecreated"}}`
    #adding to array 
    $mbstats += $mbstat
  }
  else{
    #get statistics for non active sync users
    $mbstat = Get-Mailbox -Identity "$dn" | Get-MailboxStatistics | Select-Object DisplayName,MailboxGuid, @{name="TotalItemSize (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},ItemCount,@{name="ActiveSync";expression={"False"}} 
    #adding to array
    $mbstats += $mbstat
  }
} 

Nach der Verarbeitung aller Postfächer befinden sich die Informationen in der Variablen $mbstats, somit kann diese Variable nun noch als CSV exportiert werden.

#export information to csv with delimiter 
$mbstats | Export-Csv -Path "$csvpath" -Encoding UTF8 -Delimiter ";"

Mit der angelegten CSV lässt sich eben der Import in Excel problemlos erledigen und nach Größe etc. filtern.

Hier noch das komplette Skript in voller Länge:

[string]$timestamp = (Get-Date -Format yyyy-MM-dd-HH-mm) 
###### insert path to csv export
$csvpath = "C:\temp\exon-stats-$timestamp.csv"
######
#install module for all users on pc (once)
Install-Module ExchangeOnlineManagement # -Verbose -Scope AllUsers -Force
#import module 
Import-Module ExchangeOnlineManagement 
#connecto to exchange online (admin credentials needed)
Connect-ExchangeOnline 
#see statistics of mailboxes
$mbs = Get-Mailbox -ResultSize Unlimited | Sort-Object name
#create an array for all statistics
$mbstats = @()
foreach($mb in $mbs){
  $dn = (($mb).identity)
  $activesync = (Get-CASMailbox -Identity "$dn").hasactivesyncdevicepartnership
  if ($activesync -eq $true){
    #fetching active sync device information
    $activesyndevice = Get-MobileDevice -Mailbox "$dn" | Select-Object DeviceType,DeviceOS,DeviceUserAgent,WhenCreated
    $devicemodel = @()
    $devicemodel = ($activesyndevice) | Select-Object DeviceType -ExpandProperty DeviceType 
    $devicemodel = $devicemodel -join '||' 
    $deviceos = @()
    $deviceos = ($activesyndevice) | Select-Object DeviceOS -ExpandProperty DeviceOS 
    $deviceos = $deviceos -join '||'
    $deviceuagent = @()
    $deviceuagent =  ($activesyndevice) | Select-Object DeviceUserAgent -ExpandProperty DeviceUserAgent
    $deviceuagent = $deviceuagent -join '||'
    $devicecreated = @()
    $devicecreated = ($activesyndevice) | Select-Object WhenCreated -ExpandProperty WhenCreated
    $devicecreated = $devicecreated -join '||'
    #putting everything together (active sync devices and mailbox statistics)
    $mbstat = Get-Mailbox -Identity "$dn" | Get-MailboxStatistics | Select-Object DisplayName,MailboxGuid,`
    @{name="TotalItemSize (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},`
    ItemCount,@{name="ActiveSync";expression={"True"}}, @{name="DeviceType";expression={"$devicemodel"}},@{name="DeviceOS";expression={"$deviceos"}},`
    @{name="DeviceAgent";expression={"$deviceuagent"}},@{name="DeviceFirstConnected";expression={"$devicecreated"}}`
    #adding to array 
    $mbstats += $mbstat
  }
  else{
    #get statistics for non active sync users
    $mbstat = Get-Mailbox -Identity "$dn" | Get-MailboxStatistics | Select-Object DisplayName,MailboxGuid, @{name="TotalItemSize (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},ItemCount,@{name="ActiveSync";expression={"False"}} 
    #adding to array
    $mbstats += $mbstat
  }
} 
#export information to csv with delimiter 
$mbstats | Export-Csv -Path "$csvpath" -Encoding UTF8 -Delimiter ";"

Viel Spaß mit dem Skript und hoffentlich gute Ergebnisse beim Analysieren eurer Exchange Online Umgebung. Ich hoffe, dass jemand was damit anfangen kann.

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