Zusammenfassung: Nachfolgend geht es um das Verteilen von Postfächern aus einer Quelldatenbank auf verschiedene Zieldatenbanken, abhängig von bestimmten Parametern.
Eine interessante Aufgabe war zu lösen: In einer Exchange 2007 Umgebung sollte dem Wildwuchs bei der Postfachgröße endlich Einhalt geboten werden. Die existierenden Postfachdatenbanken hatten keine Limits, dementsprechend gab es Kandidaten, bei denen die Postfachgröße im Laufe der Zeit riesige Ausmaße annahm (bis zu 11 GB).
Beschlossen wurden 4 Größenkategorien, entsprechend wurden neue Postfachdatenbanken angelegt. Jetzt sollten die Postfächer anhand der jeweiligen aktuellen Größe in die neuen Datenbanken umgezogen werden. Dank Powershell eine lösbare Aufgabe. Das folgende Script ordnet alle Postfächer einer Datenbank der entsprechenden Größenkategorie zu, aktiviert die Option “Standardwerte für Postfachdatenbank verwenden” unter Speicherkontingente und zieht die Mailbox schließlich mit move-mailbox in die Zieldatenbank um. Für einen Probelauf des Scripts ohne Umzug der Mailboxen, kann der Parameter -ValidateOnly an den move-mailbox Befehl angehängt werden.
function get-moves { #$databases = Get-Mailboxdatabase $AllUsers = @() $AllUsersEmail = @() $Kat1 = @() $Kat2 = @() $Kat3 = @() $Kat4 = @() $ckat1 = 0 $ckat2 = 0 $ckat3 = 0 $ckat4 = 0 #foreach ($database in $databases) #{ $AllUsers += Get-Mailbox -Database Servername\Databasename -Resultsize Unlimited |Get-MailboxStatistics |select database,displayName,itemcount, TotalItemSize, identity foreach ($user in $AllUsers) { set-mailbox -Identity $user.Identity -UseDatabaseQuotaDefaults $true if ($user.TotalItemSize.Value.ToMB() -lt 500) { $Kat1 += $user.Identity $ckat1 ++ } if ($user.TotalItemSize.Value.ToMB() -gt 500) { if ($user.TotalItemSize.Value.ToMB() -lt 1000) { $Kat2 += $user.Identity $ckat2 ++ } } if ($user.TotalItemSize.Value.ToMB() -gt 1000) { if ($user.TotalItemSize.Value.ToMB() -lt 2000) { $Kat3 += $user.Identity $ckat3 ++ } } if ($user.TotalItemSize.Value.ToMB() -gt 2000) { $Kat4 += $user.Identity $ckat4 ++ } $obj = new-object psObject $obj |Add-Member -MemberType noteproperty -Name "Datenbank" -Value $user.database $obj |Add-Member -MemberType noteproperty -Name "Display Name" -Value $user.DisplayName $obj |Add-Member -MemberType noteproperty -Name "Item Count" -Value $user.ItemCount $obj |Add-Member -MemberType noteproperty -Name "Total Item Size" -Value $user.totalitemsize.value.ToMB() $obj |Add-Member -MemberType noteproperty -Name "Identity" -Value $user.Identity $AllUsersEmail += $obj } $AllUsersEmail |Export-Csv c:\moves.csv -NoTypeInformation -encoding default Write-Host $ckat1 Write-Host $ckat2 write-Host $ckat3 write-Host $ckat4 $Kat4 | move-mailbox -targetdatabase "Servername\Databasename" -confirm:$false -maxthreads 4 $Kat3 | move-mailbox -targetdatabase "Servername\Databasename" -confirm:$false -maxthreads 4 $Kat2 | move-mailbox -targetdatabase "Servername\Databasename" -confirm:$false -maxthreads 4 $Kat1 | move-mailbox -targetdatabase "Servername\Databasename" -confirm:$false -maxthreads 4 }




Kommentare