rme1985
Goto Top

Powershell Exchange User auf Datenbanken verteilen

Hallo zusammen,

ich wollte auf unserem Exchange Datenbanken neu aufbauen und die Benutzer neu strukturieren.

In meinem Test wollte ich alle Benutzer welche nicht größer als 800 MB sind auf meine Datenbanken gleichmäßig verteilen.

Bis auf den MoveRequest, welcher alle User in eine Datenbank schaufelt funktioniert das auch super. Was ich nun nicht weiß ist, wie ich die Verteilung gleichmäßig auf meine Datenbanken steuern kann.

Hat da jemand eine Idee?


#Benutzer auslesen
$user = Get-Mailbox -ResultSize Unlimited | Select-Object alias | foreach-object {Get-MailboxStatistics -Identity $_.alias | select-object DisplayName,Database, @{Name="Mailboxsize";expression={$_.TotalItemSize.Value.ToMB()}}}  
$Database = Get-MailboxDatabase | where-object {$_.Name -like "DB*"}  



#Verteilung in Datenbanken
foreach($u in $user){

if($u.Mailboxsize -le 800){

foreach($data in $database){

New-MoveRequest -Identity $u.displayname -TargetDatabase $data.name -Priority High -BadItemLimit 100 -AcceptLargeDataLoss

}}}

Content-Key: 606551

Url: https://administrator.de/contentid/606551

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: SlainteMhath
SlainteMhath 21.09.2020 um 15:33:52 Uhr
Goto Top
Moin,
Moin,

in etwa so

$i=0
foreach($u in $user)
  if($u.Mailboxsize -le 800){
    if($i -gt $Database.Count-1) $i=0
    $target=$Database[$i].name
    Move-MailboxRequest  .... -TargetDatabase $target ...
    $i++
  }
}

Ohne Gewähr face-smile

lg,
Slainte
Mitglied: emeriks
emeriks 21.09.2020 um 16:03:31 Uhr
Goto Top
Hi,
am Rande:
Eine Verteilung der Postfächer über die DB's nach Postfachgröße halte ich maximal für sinnvoll, wenn man da Jäger und Sammler auf langsamere Platten verdammen will. Ansonsten halte ich eine Verteilung nach Aktivität für sinnvoller. Was hätte man gewonnen, wenn man in der einen DB 10 große Postfächer mit wenig Aktivität und in einer zweiten DB 100 kleine PF mit viel Aktivität hat?

E.
Mitglied: RME1985
RME1985 22.09.2020 um 07:22:14 Uhr
Goto Top
Vielen Dank, probiere ich gleich mal aus face-smile
Mitglied: RME1985
RME1985 25.09.2020 um 20:15:32 Uhr
Goto Top
sorry für die späte Rückmeldung.

Leider funktioniert es nicht.

ich sehe zwar, dass die Variablen mit Werten gefüllt werden, leider wird der MoveRequest aber nicht ausgeführt.

Könnte es etwas mit if($i -gt $Database.Count-1) $i=0 zu tun haben?
Mitglied: RME1985
RME1985 26.09.2020 um 14:48:35 Uhr
Goto Top
Gibt es hier niemanden der mir Helfen kann?
Mitglied: SlainteMhath
SlainteMhath 28.09.2020 um 07:56:45 Uhr
Goto Top
Schau doch mal ob die Variablen korrekt gefüllt werden.
- $Database
- $target
- $i

Mach mal ein paar Debug Ausgaben...

Könnte es etwas mit if($i -gt $Database.Count-1) $i=0 zu tun haben?
Wie kommst du darauf?
Mitglied: RME1985
RME1985 29.09.2020 um 07:24:21 Uhr
Goto Top
ja die Variablen werden schon mit Werten gefüllt nur wenn=

i$ -gt ist macht er gar nichts. Das müsse dann -le sein damit die Bedingung überhaupt erfüllt wird.

Dann zählt er meine 3 Datenbanken hoch und hört dann auf.

Er soll ja aber das Ganze rollierend machen. Wenn er bei Datenbank 3 angekommen ist soll er ja wieder bei 1 einfachen, damit alle User gleichmäßig verteilt werden.

Von daher geht das leider nicht so dolle ;)
Mitglied: emeriks
emeriks 29.09.2020 aktualisiert um 08:21:54 Uhr
Goto Top
Zitat von @RME1985:
i$ -gt ist macht er gar nichts. Das müsse dann -le sein damit die Bedingung überhaupt erfüllt wird.
Nein. "-gt" ist schon korrekt so.
Nur, da fehlen die Klammern.
if($i -gt $Database.Count - 1) { $i=0 }

E.
Mitglied: SlainteMhath
SlainteMhath 30.09.2020 um 11:44:07 Uhr
Goto Top
Nur, da fehlen die Klammern.
Ja, das war der Copy&Paste Blocker :D