Wieder eine Aufgabe aus dem echten Leben: Kunde importierte in der Vergangenheit die Exchange-Empfänger eines anderen Unternehmens manuell(!) als Kontakte ins eigene Adressbuch. In Zukunft soll dies automatisiert mit dem Tool GalSync von Netsec geschehen.
Um bei der ersten Synchronisation mit GalSync einen sauberen Stand zu haben, wurde beschlossen, alle bisher vorhandenen Kontakte vor der ersten Synchronisation zu entfernen. Nur leider wurden einige dieser Kontakte in der Vergangenheit als Mitglieder zu Verteilergruppen hinzugefügt. Die Aufgabenstellung, die ich dann per Powershell löste, war folgende:
- Alle Kontakte der Firma B herausfinden, die Mitglied in Verteilergruppen sind
- Vorbereitung eines Scripts für die automatisierte Wiederaufnahme der Kontakte in die Verteilergruppen
Das folgende Script erstellt eine Datei membersadd.ps1, mit deren Hilfe die Kontakte nach der ersten Synchronisation wieder in die Verteilergruppen aufgenommen werden.
function get-orga2members { # Definition der Variablen $final = @() $i = 1 $y = 1 # Finde alle Verteilerlisten $dls = Get-DistributionGroup # Führe die folgenden Befehle für jede Verteilerliste aus foreach ($dl in $dls) { # Zähler um 1 erhöhen $i++ $AllContacts = @() $AllContactsEmail = @() # Prüfe ob Kontakte Mitglieder sind, die @domainpart.tld als Primäre SMTP Adresse haben $AllContacts += Get-DistributionGroupMember -Identity $dl -ResultSize Unlimited | Where-Object { $_.PrimarySMTPAddress -match "@domainpart.tld" } | select displayName, PrimarySMTPAddress # Wenn der vorhergehende Befehl keinen Treffer hatte, muss auch nichts weiter gemacht werden If ($AllContacts -ne $Null) { # Zähler um 1 erhöhen $y++ # Führe folgende Befehle für jeden Kontakt aus foreach ($contact in $AllContacts) { $mail = $contact.PrimarySMTPAddress # Hiermit wird der Befehl zusammengestellt, um den Kontakt später wieder in den Verteiler aufzunehmen $task = "Add-DistributionGroupMember -Identity ""$dl"" -Member $mail" # Ein bisschen Kontrolle muss sein, deshalb zur Sicherheit $obj = new-object psObject $obj | Add-Member -MemberType noteproperty -Name "Verteilerliste" -value $dl $obj | Add-Member -MemberType noteproperty -Name "Empfänger Name" -value $contact.displayName $obj | Add-Member -MemberType noteproperty -Name "Empfänger Adresse" -value $contact.PrimarySMTPAddress $AllContactsEmail += $obj # Ausgabe des Befehls in eine Datei, für die spätere Ausführung $task | out-file membersadd.ps1 -encoding default -append } $final += $AllContactsEmail } } $final | export-csv alleverteiler.csv -NoTypeInformation -encoding default Write-Host $i " Verteiler gefunden" Write-Host $y " Verteiler müssen angefasst werden" } |
[New Post] Exchange 2007: Verteilergruppen-Mitglieder vom Typ E-Mail Kontakt – via @twitoaster http://www.roland-ehle.de/archives/1007