adminknecht
Goto Top

Exchange 2010: Den ALIAS aller Postfächer per CMDLET ändern in ein Muster "6 Zeichen Nachnamen + 2 Zeichen Vornamen"?

Hallo,

im Zuge einer Migration möchte ich den ALIAS aller Postfächer ändern, bei "Max Mustermann" soll dann aus "MUSTERMANNMAX" eben "MUSTERMA" werden (ist bei uns eindeutig)

Hintergrund: Mit einem weiteren CMDLET will ich dann die Inhalte aller Postfächer in jeweils ein PST exportieren, welches den ALIAS als Namen tragen soll:

(Get-Mailbox) | foreach {New-MailboxExportRequest -Mailbox $_.alias -FilePath "\\share\$_.pst"}   

Oder kann man das gleich in diesem CMDELT hinbekommen?

Ich bin schon mal für jeden Tipp dankbar!

Schöne Grüße

Marcus

Content-Key: 281814

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

Printed on: April 25, 2024 at 01:04 o'clock

Member: colinardo
Solution colinardo Sep 02, 2015, updated at Sep 03, 2015 at 13:53:39 (UTC)
Goto Top
Hallo Marcus,
Für alle UserMailboxen ...
# Aliase ändern
(Get-Mailbox -RecipientTypeDetails UserMailbox) | %{
    $u = Get-AdUser $_.SamAccountName
    if ($u.Surname -ne $null -and $u.GivenName -ne $null ){
        Set-Mailbox $_.Alias -Alias "$($u.Surname[0..5] -join '')$($u.Givenname[0..1] -join '')"  
    }
}
# Mailboxen exportieren
Get-Mailbox | %{$_ | New-MailboxExportRequest -FilePath "\\server\share\$($_.Alias).pst"}  
Ein umbenennen des Alias nur für den Export wäre aber nicht nötig das ließe sich oben auch direkt in den ersten Teil integrieren.

Ohne Alias umbenennen direkter Export mit gewünschtem Alias:
(Get-Mailbox -RecipientTypeDetails UserMailbox) | %{
    $u = Get-AdUser $_.SamAccountName
    if ($u.Surname -ne $null -and $u.GivenName -ne $null ){
        $alias = "$($u.Surname[0..5] -join '')$($u.Givenname[0..1] -join '')"  
    }else{$alias = $_.Alias}
    New-MailboxExportRequest $_.Alias -FilePath "\\server\share\$($alias).pst"   
}
Das Script oben behandelt jetzt nur UserMailboxen, SharedMailboxes und RoomMaliboxes habe ich jetzt mal außen vor gelassen, da diese vermutlich nicht nach dem Schema umbenannte werden sollen, da sie ja meist keinen Vor- und Nachnamen haben. Aber das kannst du ja nach Bedarf mit dem Parameter -RecipientTypeDetails festlegen.
Die möglichen Werte sind:
    DiscoveryMailbox
    EquipmentMailbox
    LegacyMailbox
    LinkedMailbox
    RoomMailbox
    SharedMailbox
    UserMailbox
Grüße Uwe
Member: manuel-r
manuel-r Sep 02, 2015 at 15:57:26 (UTC)
Goto Top
Hintergrund: Mit einem weiteren CMDLET will ich dann die Inhalte aller Postfächer in jeweils ein PST exportieren, welches den ALIAS als Namen tragen soll
Und warum musst du dafür vorher den Alias ändern? Die Datei kann doch ebenso gut auch mustermannmax.pst heißen.
Member: AdminKnecht
AdminKnecht Sep 03, 2015 updated at 08:12:28 (UTC)
Goto Top
Hallo Uwe,

Wahnsinn, vielen Dank für deine Mühe!

Ich habe das erste Skript mal getestet, wenn ich lediglich statt -ALIAS nun -CUSTOMATTRIBUTE2 nehme (im 1. Feld steht bei uns etwas, und zum Testen wollte ich nicht gleich den ALIAS überschreiben ...), hagelt es Fehlermeldungen, und zwar 2 Stück zu jedem Postfach:

Die Pipeline wird nicht ausgeführt, da bereits eine Pipeline ausgeführt wird. Pipelines können nicht gleichzeitig ausgeführt werden.
    + CategoryInfo          : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) ,
   PSInvalidOperationException
    + FullyQualifiedErrorId : RemotePipelineExecutionFailed

und

Es wurde kein Positionsparameter gefunden, der das Argument "Th" akzeptiert.  
    + CategoryInfo          : InvalidArgument: (:) [Set-Mailbox], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Set-Mailbox

?????

Viele Grüße

Marcus
Member: colinardo
Solution colinardo Sep 03, 2015 updated at 13:53:31 (UTC)
Goto Top
Kann ich hier zwar nicht nachvollziehen, aber wegen der Pipeline, setzen die Mailboxes mal in Klammern:
(Get-Mailbox -RecipientTypeDetails UserMailbox) | %{
Das sollte helfen. Ich hatte noch etwas kleines geändert, vermutlich hast du es verpasst. Klappt hier sonst einwandfrei.

Was du wie angepasst hast kann ich leider nicht sehen ...

Grüße Uwe

p.s. statt ein anderes Attribut zu nehmen: Es gibt bei jedem Befehl den Parameter -whatif der einen nur anzeigt was passieren würde anstattes tatsächlich durchzuführen, zusätzlich mit dem Parameter -verbose wird dir alle nur protokolliert anstatt durchgeführt.
Member: AdminKnecht
AdminKnecht Sep 03, 2015 at 12:18:40 (UTC)
Goto Top
.aah, ja, die Änderung hatte ich in der Tat nicht mitbekommen, jetzt funktioniert es, super Klasse!

Ich habe nun den ALIAS bei allen Benutzerpostfächern geändert, so weit, so gut, wenn ich damit nun die Postfächer exportieren will mit diesem cmdlet im Beispiel für den User Max Mustermann (MUSTERMA)...

(Get-Mailbox -filter {alias -like 'must*'}) | foreach {New-MailboxExportRequest -Mailbox $_.alias -FilePath "\\share\$_.pst"}  

..bekomme ich trotzdem ein File namens "Mustermann, Max.pst" statt dem erwarteten "MUSTERMA.pst"!

Der ALIAS steht eindeutig so im Postfach eingetragen, offene ExportRequests gab es keine mehr, ich habe sogar den EX2010 einmal durchgebootet...

Was mache ich da noch falsch?

Viele Grüße

Marcus
Member: AdminKnecht
AdminKnecht Sep 03, 2015 at 12:21:02 (UTC)
Goto Top
Zitat von @manuel-r:
Und warum musst du dafür vorher den Alias ändern? Die Datei kann doch ebenso gut auch mustermannmax.pst
heißen.

...naja, das wird auf der "anderen Seite" der Migration zum Import in die Postfächer der fremden Organisation benutzt, dort ist der ALIAS bereits entsprechend hinterlegt.
Member: colinardo
Solution colinardo Sep 03, 2015 updated at 13:53:24 (UTC)
Goto Top
Zitat von @AdminKnecht:
Was mache ich da noch falsch?
Der String für den Pfad am Ende muss so lauten
"\\share\$($_.Alias).pst"  
Wenn du eine Eigenschaft eines Objekts innerhalb von doppelten Anführungszeichen ausgeben willst musst du die Evalution-Klammern benutzen $() sonst kann die Powershell nicht unterscheiden handelt es sich um einen String oder eine Variable.
Member: AdminKnecht
AdminKnecht Sep 03, 2015 updated at 13:53:19 (UTC)
Goto Top
PERFEKT! So funktioniert das --- Immer wieder ein Wahnsinn was man mit der Powershell anstellen kann, aber auch wie kniffelig das sein kann, wenn man sich nicht ständig damit befasst / befassen kann!

Tausend Dank und einen schönen Feierabend

Marcus