One concept that I played with in this script is using hash tables. Hash tables allow you to specify a string value to an array, and it returns another entry.
For example, the code:
$pfdbs = get-publicfolderdatabase
$DBSize = @{}
$pfdbs | %{$dbsize[$_.identity.tostring()] = 0}
$MDBG | %{$dbsize[([string]$_.name)] = $_.count}
when completed, will be a hash table of PF DBs and the # of mailbox dbs pointing to each.
$DBSize{"PF-DB01"} returns the value of 8
This later on in the script allows me to both track how many dbs are pointing to a specific PF db.
$dbsize[$destination.identity.tostring()] += 1
$dbsize[$mdbgp.name] -= 1
The code does assume 2007 PF dbs exist in the environment, so when we decommission that environment, I'll need to rerun the script without the -includepreExchange2010 switch.
<# .SYNOPSIS Distribute mailbox dbs across all Public folder dbs. #> $pfDbs = get-publicfolderdatabase -includepreexchange2010 $mbdbs = get-mailboxdatabase $mbc = $mbdbs.count $pfc = $pfDbs.count [int] $adbc = ($mbc / $pfc) $MDBG = $mbdbs | group publicfolderdatabase $moveOff = $MDBG | ?{$_.count -gt $adbc} $DBSize = @{} $pfdbs | %{$dbsize[$_.identity.tostring()] = 0} $MDBG | %{$dbsize[([string]$_.name)] = $_.count} if ($moveOff -eq $null) { Write-Host "nothing to do." $dbsize break} ForEach ($mdbgp in $moveOff) { $MoveCount = $mdbgp.count - $adbc forEach ($db in $MDBGP.group[0..$moveCount]) { $destinations = $pfdbs | ?{$dbsize[$_.identity.tostring()] -lt $adbc} if ($destinations -is [array]) { $destination = $destinations[0] } elseif ($destinations -eq $null) { Write-Host "no destinations under average, $adbc" break } else { $destination = $destinations } if ($destination -ne $null -and $destination -ne $mdbgp.name) { Write-Host $db,$mdbgp.name,$destination Set-mailboxdatabase -identity $db -publicfolderdatabase $destination $dbsize[$destination.identity.tostring()] += 1 $dbsize[$mdbgp.name] -= 1 } } } $dbsize
No comments:
Post a Comment