Auflistung von Exchange Statistiken per PowerShell

Wer vor der Migration von einem Exchange Server steht, der muss an einem gewissen Punkt der Vor-Überlegungen wissen, wie viele Postfächer existieren, welche Größe diese Postfächer besitzen, welche Datenbanken existieren usw.

Man könnte sich diese Daten natürlich auch per Hand besorgen, ein Auslesen per Windows PowerShell ist hier aber deutlich einfacher und schneller. Da ich mir ein paar Zeilen Code zusammengesammelt und auf meine Bedürfnisse angepasst habe, hier eine kleine Übersicht, sowohl für euch als auch für mich später 🙂

Welche Datenbanken existieren?

Wenn man erst einmal nicht viel von der Umgebung weiß und nur Zugangsdaten sowie einen Servernamen hat, kann man mit dem Auslesen der aktuellen Datenbanken beginnen. Dies und alle weiteren Befehle müssen (natürlich) in der Exchange Management Shell abgesetzt werden, nicht in einer einfachen PowerShell, da hier die Cmdlets fehlen.

$Servername = "server.domain"
Get-MailboxDatabase -Server $Servername

Dieser Befehl führt alle Datenbanken auf, die auf dem entsprechenden Server vorhanden sind. Somit haben wir erst einmal einen Überblick darüber, wie viele Datenbanken existieren und wie diese heißen.

Die Mailboxen in diesen Datenbanken

Um nun die Postfächer in diesen Datenbanken aufzuführen, erweitern wir den Befehl ein wenig und beginnen damit, eine einzelne Datenbank anzusprechen.

$Servername = "server.domain"
$DBName = "DBName"
Get-MailboxDatabase -Server $Servername | where name -eq $DBName | Get-Mailbox

Spricht man direkt die gewünschte Datenbank an, zeigt ein “Get-Mailbox” die verfügbaren Postfächer an.

Diese kurze Übersicht ist allerdings nicht wirklich aussagekräftig, außer das halt alle Postfächer aufgeführt werden zusammen mit der Info, wie hoch das Quota liegt. Daher gehen wir jetzt noch ein paar Schritte weiter und verfeinern die Ergebnisse auf unsere Bedürfnisse.

Anzahl der Postfächer auflisten

Manchmal kann die Menge der Postfächer, unabhängig von der Größe, eine wichtige Information sein. Dies geht sehr einfach, einfach ne Klammer um den Befehl und ein .count dahinter und schon wird die PowerShell dazu gebracht, uns die Anzahl der Postfächer anzuzeigen.

$Servername = "server.domain"
$DBName = "DBName"
(Get-MailboxDatabase -Server $Servername | where name -eq `
  $DBName | Get-Mailbox).count

Erweiterte Statistiken ausgeben und filtern

Die reine Menge ist nicht wirklich ein Indiz dafür, wie groß die Postfächer sind und wie lange eine Migration dauern könnte. Daher verfeinern wir die Abfrage noch weiter und schauen uns erst einmal an, welche Werte wir überhaupt bekommen können. Der folgende Befehl zeigt für ein einzelnes Postfach alle verfügbaren Informationen an. Dies ist sehr viel, wobei einige mögliche Werte auch in meinem Fall leer bleiben.

$Servername = "server.domain"
$DBName = "DBName"
$User = "Hans Mustermann"
Get-MailboxDatabase -Server $Servername | where name -eq $DBName `
  | Get-Mailbox | where Name -eq $User | Get-MailboxStatistics | fl *

Aus diesen Werten kann ich nun die für mich relevanten Werte heraussuchen und die Abfrage so filtern, dass nur diese Werte ausgegeben werden. Weiterhin können diese Werte so umgelabelt und umgerechnet werden, dass sie in einer Form bzw. einer Größe ausgegeben werden, die mir persönlich am besten gefällt. Hier möchte ich z.B. die Größe in MB haben, nicht in Byte oder Gigabyte.

$Servername = "server.domain"
$DBName = "DBName"
Get-MailboxDatabase -Server $Servername | where name -eq $DBName | `
  Get-Mailbox | Get-MailboxStatistics | `
  ft @{label="Benutzer";expression={$_.DisplayName}},`
  @{label="Absolute Groesse (MB)";`
  expression={$_.TotalItemSize.Value.ToMB()}},`
  @{label="Items";expression={$_.ItemCount}} -auto

Sortierung nach Größe

Diese Liste kann natürlich auch sortiert werden, um das größte Postfach oben anzeigen zu lassen, das zweitgrößte danach usw. Dies gelingt mit dem hinzufügen von dem Code Sort-Object TotalItemSize –Descending. Der Code sieht dann wie folgt aus:

$Servername = "server.domain"
$DBName = "DBName"
Get-MailboxDatabase -Server $Servername | where name -eq $DBName | `
  Get-Mailbox | Get-MailboxStatistics | Sort-Object `
  TotalItemSize –Descending | ft @{label="Benutzer";`
  expression={$_.DisplayName}},@{label=`
  "Absolute Groesse (MB)";`
  expression={$_.TotalItemSize.Value.ToMB()}},`
  @{label="Items";expression={$_.ItemCount}} -auto 

Als Ergebnis sieht man die Ergebnisse in einer übersichtlichen und sortierten Übersicht:

Soll die Ausgabe in eine Datei geschrieben werden, um sie nachträglich noch bearbeiten oder anderweitig nutzen zu können, muss die Ausgabe um einen weiteren Befehl erweitert werden.

$Servername = "server.domain"
$DBName = "DBName"
Get-MailboxDatabase -Server $Servername | where name -eq $DBName | `
  Get-Mailbox | Get-MailboxStatistics | Sort-Object `
  TotalItemSize –Descending | ft @{label="Benutzer";`
  expression={$_.DisplayName}},`
  @{label="Absolute Groesse (MB)";`
  expression={$_.TotalItemSize.Value.ToMB()}},`
  @{label="Items";expression={$_.ItemCount}} -auto | `
  Out-File -filepath "C:\temp\$Servername-$DBName.txt"

Die Ausgabe erfolgt nun in eine Datei, die den Server-Namen und den Datenbank-Namen enthält. So ist eine Zuordnung direkt möglich und die Datei wird bei anderen Datenbanken nicht direkt überschrieben.

Alle Datenbanken in einer Schleife abfragen

Wenn wir nun alle Datenbanken von einem Server abfragen möchten, geht dies natürlich auch in der PowerShell. Wir verwenden dazu eine kleine Schleife, die alle Datenbanken nach und nach abfragt und die Ergebnisse mit dem bereits aufgeführten Skript in jeweils eine Datei schreibt.

$Servername = "server.domain"
$DBNames = Get-MailboxDatabase -Server $Servername
foreach ($DBName in $DBNames.Name) {
    Get-MailboxDatabase -Server $Servername | `
      where name -eq $DBName | Get-Mailbox | `
      Get-MailboxStatistics | Sort-Object `
      TotalItemSize –Descending | ft @{label="Benutzer";`
      expression={$_.DisplayName}},`
      @{label="Absolute Groesse (MB)";`
      expression={$_.TotalItemSize.Value.ToMB()}},`
      @{label="Items";expression={$_.ItemCount}} -auto | `
      Out-File -filepath "C:\temp\$Servername-$DBName.txt"
}

Fazit

Die Abfrage von Informationen in einem Exchange Server gestaltet sich mit der Windows PowerShell sehr einfach, wenn man die entsprechenden Befehle kennt und weiß, wie man die Daten ansprechen kann. Ich hoffe, ich kann mit diesem Artikel ein klein wenig Licht ins Dunkel bringen und kann dem ein oder anderen bei einer Migration oder Dokumentation helfen.


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Ein Kommentar:

  1. Hallo,
    Besteht auch die Möglichkeit , dass man das kleinste Datenbank von Exchange auch ermittelt?

    Vielen Dank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert