Exchange 2010/2013: Datenbanken per Script auf die entsprechenden Server verteilen

In Exchange Umgebungen mit DAG und mehreren Datenbankkopien, sollten die Datenbanken normalerweise gleichmäßig über die Datenbank Server verteilt werden. Allerdings kann sich diese Situation ändern, wenn ein Failover eingetreten ist, oder die Datenbanken zu Wartungszwecken auf anderen Servern aktiv geschaltet wurden. Irgendwann hat man dann ggf. die Situation das alle Datenbanken auf einem Server aktiv sind und die anderen Server sich langweilen.

Abhilfe schafft dieses kleine Script:

#www.FrankysWeb.de
#Frank  Zöchling
#---------------------------------

$From = "DBMover@frankysweb.de"
$To = "frank@frankysweb.de"
$SMTPServer = "smtp.frankysweb.de"

#---------------------------------

$exsnapin = Add-PSSnapin *exchange*
$Databases = Get-MailboxDatabase
$DBStatus = @() 
[string]$mail = "<b>Der MailboxServer für folgende Datenbanken wurde geändert</b>

"
foreach ($database in $databases)
	{
		$DBName = $database.Name
		$DBPreferedServer = ($database.ActivationPreference | where {$_.value -eq "1"}).key.name
		$DBCurrentServer = ($database.Server).name
		if ($DBPreferedServer -ne $DBCurrentServer)
			{
				write-host "Aktiver Mailbox Server für Datenbank $DBName wird auf Server $DBPreferedServer geändert (war aktiv auf $DBCurrentServer)" -ForegroundColor yellow
				$MoveDB = Move-ActiveMailboxDatabase $DBName -ActivateOnServer $DBPreferedServer
				$DBStatus += new-object PSObject -property @{Database="$DBName";DBPreferedServer="$DBPreferedServer";DBCurrentServer="$DBCurrentServer";DatabaseMove="yes"} 
				
			}
		else
			{
				write-host "Datenbank $DBName ist aktiv auf dem vorgesehenen Server" -ForegroundColor green
				$DBStatus += new-object PSObject -property @{Database="$DBName";DBPreferedServer="$DBPreferedServer";DBCurrentServer="$DBCurrentServer";DatabaseMove="no"} 
			}
	}

if ($DBStatus.databasemove -contains "yes")
	{
		$DBmoved = $DBStatus | where {$_.Databasemove -match "yes"}
		[string]$mail += $DBmoved | ConvertTo-Html
		Send-MailMessage -From $from -To $to -SmtpServer $SMTPServer -Subject "Mailbox Datenbanken neu verteilt" -Body $mail -BodyAsHTML -Encoding UTF8
	}

Das Script verteilt alle Datenbanken auf die entsprechenden Server. Das Script kann manuell oder per Taskplaner ausgeführt werden. Sobald die Datenbanken gemäß ihrer Präferenz verteilt wurden, wird eine Mail zur Benachrichtigung verschickt.

Im oberen Teil des Scripts müssen nur Empfänger, Absender und SMTP Server angegeben werden. Per Taskplaner kann diese Einstellung für das Ausführen des Scripts zu einem gewählten Zeitraum genutzt werden:

Datenbanken

4 Gedanken zu „Exchange 2010/2013: Datenbanken per Script auf die entsprechenden Server verteilen“

  1. Hi Frank,
    dein Skript ist super und ich habe das bei uns jetzt per Task eingebaut, aber bei mir funktioniert leider die Mailbenachrichtigung nicht. Hast Du mir eine Idee, woran das liegen kann? Alle 3 „Adressen“ passen, aber und er bringt mir auch keine Fehlermeldung, aber es kommt halt nichts an.
    Danke und Grüße, Heike

    Antworten
  2. Pingback: Datenbanken per Script auf die entsprechenden Server verteilen › WSUSpraxis.de
  3. Hi,

    hier fehlt zwar das Reporting welche DB nun tatsächlich verschoben wurde, aber im Grunde tut’s das hier doch auch:

    (unter $exscripts)
    .\RedistributeActiveDatabases.ps1 -DagName %DAG% -BalanceDbsByActivationPreference -ShowFinalDatabaseDistribution -Confirm:$false

    Optional läuft dazu ein Nagios-Check der den Preferred Owner checkt, wobei ich dazu übergegangen „Redistribute“ per Task einfach wiederkehrend ausführen zu lassen.

    Grüße,
    Norbert

    Antworten
    • Hi Norbert,

      du hast völlig Recht. Das mitgelieferte Script macht genau was es soll. Mein Script macht es genauso und verschickt eine Mail. Im Prinzip hat man jetzt die Wahl: Silent oder mit Benachrichtigung :-)

      Danke und Gruß,
      Frank

      Antworten

Schreibe einen Kommentar