Get-DAGStatus

Das kleine Powershell-Script, welches ich aktuell interaktiv oder per Taskplaner immer mal wieder aufrufen lasse, ermittelt alle Datenbanken und die Server der DAG und gibt diese als XML-Datei aus. Wenn Sie diese Datei über den IIS verfügbar machen, kann jeder anonym oder nach Anmeldung den aktuellen Status anzeigen und über eine XSLT-Transformation in HTML konvertiert werden. Über den HTTP-Refresh kann die Seite sogar auf einem Statusmonitor permanent angezeigt werden. Anstelle einem permanenten Update wäre es natürlich auch denkbar, die Information erst beim Aufruf durch den Webserver erstellen zu lassen. Eine anderen Option wäre natürlich ein Windows Programm (z.B. Silverlight), welches diese Daten anders grafisch anzeigt.

Das Skript ermittelt die DAG-Member und die Datenbanken und baut eine Tabelle auf, in deren Kreuzungspunkten der aktuelle Status der Datenbank auf diesem Server sichtbar wird.

Beispiel

Da es bis zu 100 Datenbanken aber maximal 16 Server gibt, stellen die Spalten die Server darf und die Zeilen die Datenbanken. mit dem Standard XSLT-File

Get-DAGStatus DAGName: dag1.firma.local

Datenbank

Pfad

Server1 Server2 Server3 Server4 Server5
DB1 M:\DB1 1 4 3 2  
DB2 M:\DB2 2 1 2 4  
DB3 M:\DB3 3 2 1 3  
DB4 M:\DB4 4 3 2 1  

Die Liste der Server und Datenbanken wird natürlich dynamisch erstellt. In den Kreuzungspunkten steht die Aktivierungsreihenfolge und farblich ist der aktuelle Status ersichtlich:

Codierung Exchange Status Bedeutung
Blau Aktiv Dies ist die aktuell aktive Instanz bzw. der primäre Server
Grün Ready Diese Instanz ist "in Sync" und bereit, die Funktion im Fehlerfall aufzunehmen
Ein so gekennzeichneter Server ist Online
Gelb Initializing Die Datenbank wartet noch auf die ersten Logdateien, um dann hoffentlich auf "Ready" zu wechseln.
Orange Suspended Datenbankkopie ist gerade "angehalten", d.h. wird nicht weiter geschrieben
Rot Error Datenbankinstanz ist fehlerhaft und kann nicht online geschaltet werden
Der Server ist nicht aktiv/online
Weiß Entfällt Diese Datenbank ist auf dem Server nicht vorhanden, d.h. es gibt kein konfiguriertes Replikat

Die angezeigte Farbcodierung ist natürlich ebenfalls abhängig von dem XSLT-Stylesheet. (Siehe auch XML-Datei)

Funktionsweise

Das Skript wird aktuell per Parameter gesteuert. Dazu gehören:

Im Skript werden die folgenden Exchange Commandlets verwendet.

Allein aus diesen drei Commandlets erstellt das Skript eine XML-Datei, die dann für die Ausgabe formatiert wird.

PC:>[Microsoft.Exchange.Management.SystemConfigurationTasks.CopyStatus].getmembers() | ft name
Unknown
Failed
Seeding
Suspended
Healthy
ServiceDown
Initializing
Resynchronizing
Mounted
Dismounted
Mounting
Dismounting
DisconnectedAndHealthy
FailedAndSuspended
DisconnectedAndResynchronizing
NonExchangeReplication
SeedingSource

Ausgabe

Das Skript sammelt die Daten und gibt diese über die Pipeline aus, so dass diese anderweitig weiter verarbeiten werden können. Das kann ein Export-CSV, eine XML-Datei oder über eine Formatierung mit Stylesheets sogar eine HTML-Datei werden.

Für den interaktiven Einsatz ist aber auch die farbige Ausgabe auf dem Bildschirm interessant. Damit das Layout aber nicht "verwurstet" wird, müssen Sie die Ausgabe der Pipeline mit "| out-null" unterdrücken. Hier zwei Musterbilder: Eine DAG aus drei Servern (4,2,3) und drei Datenbanken (MB21, MB11, MB22). Datenbank M21 liegt auf Server4 und ist auf Server 3 gemountet. Datenbank 22 hingegen ist auch auf Server 3 gemountet, obwohl die Aktivierungsreihenfolge (Nummer im farbigen Feld)

Hier sehen Sie die gleiche Ausgabe einer neueren Version, die die Servernamen anders abschneidet

Im Gegensatz zu Exchange MMC, die immer nur den Status einer Datenbank auf vielen Servern oder die Datenbanken auf einem Server als Ansicht hat, können sie so relativ schnell einen Überblick über alle Datenbanken erhalten, was speziell im Fehlerfall sehr hilfreich sein kann.

Download

Das Skript Get-DAGStatus ist aktuell noch in einem frühen Stadium und weit davon entfernt, produktiv eingesetzt zu werden. ich werde es nach und nach bei verschiedenen Kunden immer weiter verbessern und eventuel zu einem späteren Zeitpunkt veröffentlichen. Aktuell ist es meinen Kunden vorbehalten.

Sie können mit aber bei der Verbesserung helfen. Führen Sie folgende Befehle auf der Exchange Powershell aus und senden mir die generierten XML-Dateien. Diese kann ich dann in mein Skript füttern und die Ausgaben überprüfen und damit das Skript immer weiter verbessern. Interessant sind natürlich "große DAGs" mit mehreren Servern und Datenbanken. Beachten Sie, dass Sie beim zweiten Block ihren "DAGNAMEN" ersetzen müssen

Write-Verbose "Loading existing Databases to get identity and activation preference"
$databases = (get-mailboxdatabase | SELECT name,identity,BackupInProgress,DatabaseSize,LastFullBackup,ActivationPreference)
$databases | export-Clixml -path "get-mailboxdatabase.xml"

Write-Verbose "Loading DAG Memberlist to get servers in given DAG"
$dagserver = (Get-DatabaseAvailabilityGroup -identity "DAGNAME").Servers
$dagserver | export-Clixml -path "dagserver.xml"

Write-Verbose "Loading DAG List"
$dagserver = Get-DatabaseAvailabilityGroup
$dagserver | export-Clixml -path "daglist.xml"

Write-Verbose "Loading MailboxDatabaseCopyStatus of all servers"
$mbstatus = (get-mailboxserver | where {$_.databaseavailabilitygroup -ne $null} | Get-MailboxdatabaseCopyStatus)
$mbstatus | export-Clixml -path "allcopystatus.xml"

Write-Verbose "Loading Mailboxservers"
$mbserver = (get-mailboxserver | where {$_.databaseavailabilitygroup -ne $null})
$mbserver | export-Clixml -path "get-mailboxserver-dag.xml"

Das Ergebnis sind die drei XML-Dateien, die mir einen Überblick über ihre Mailboxdatenbanken in DAGs geben. Als "Belohnung" erhalten Sie auf jeden Fall ein "Screencapture" und sind ein heißer Kandidat bei einer Pilotphase dabei sein zu können.

Offen

Weiterentwicklungen sind natürlich möglich z.B.:

Weitere Links

Keywords:Powershell DAG Cluster Monitoring Get-DAGStatus