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

Printed on: April 18, 2024 at 19:04 o'clock

Member: SlainteMhath
SlainteMhath Sep 21, 2020 at 13:33:52 (UTC)
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
Member: emeriks
emeriks Sep 21, 2020 at 14:03:31 (UTC)
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.
Member: RME1985
RME1985 Sep 22, 2020 at 05:22:14 (UTC)
Goto Top
Vielen Dank, probiere ich gleich mal aus face-smile
Member: RME1985
RME1985 Sep 25, 2020 at 18:15:32 (UTC)
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?
Member: RME1985
RME1985 Sep 26, 2020 at 12:48:35 (UTC)
Goto Top
Gibt es hier niemanden der mir Helfen kann?
Member: SlainteMhath
SlainteMhath Sep 28, 2020 at 05:56:45 (UTC)
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?
Member: RME1985
RME1985 Sep 29, 2020 at 05:24:21 (UTC)
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 ;)
Member: emeriks
emeriks Sep 29, 2020 updated at 06:21:54 (UTC)
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.
Member: SlainteMhath
SlainteMhath Sep 30, 2020 at 09:44:07 (UTC)
Goto Top
Nur, da fehlen die Klammern.
Ja, das war der Copy&Paste Blocker :D