gwaihir
Goto Top

Liste von Usern ohne Mail-Verteilermitgliedschaft erstellen

Hallo zusammen,

ich erstelle gerade eine neue E-Mail Verteiler Struktur in einem größeren Unternehmen mit >1500 Postfächern. Es ist in der Vergangenheit etwas durcheinandergekommen, wer wie in welchen Verteilern drin ist. Das neue Ziel ist: Jeder User soll in einem Abteilungsverteiler drin sein. Diese Abteilungsverteiler kommen dann in höhere Verteiler für Standorte bzw. Gesellschaften rein. Ich muss also irgendwie sicherstellen, dass nach der Umstellung auf die neuen höheren Verteiler immer noch jeder User erreicht wird. Ich würde den Abteilungsverteilern daher am Anfang den String (AV) in den Namen packen.

Wie kann ich über ein Script erreichen, dass ich folgendes machen kann:

- suche mir für jedes Postfach die Mitgliedschaften an Gruppen heraus
- prüfe, ob es dabei eine Gruppe mit dem String "(AV)" im Namen gibt
- wenn keine Gruppe gefunden, dann gib mir den Usernamen in eine csv-Datei aus

Ich habe leider keine Zeit, das selbst zu scripten, da mir leider das nötige Wissen für komplexere Scripts fehlt und ich leider nicht viel Zeit habe. Sonst würde ich versuchen, mich selbst dareinzufuchsen... also schonmal ein ganz großes Dankeschön für ein fertiges Script! Einige Spezialisten hier müssten das ja schnell zusammenbekommen...

Content-ID: 83067595047

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

Ausgedruckt am: 25.11.2024 um 02:11 Uhr

8030021182
8030021182 06.11.2023 aktualisiert um 16:59:07 Uhr
Goto Top
Hallo
Get-Mailbox -RecipientTypeDetails Usermailbox -ResultSize unlimited | ?{!((Get-ADPrincipalGroupMembership $_.DistinguishedName).Name -like '*(AV)*')} | select Name,SamAccountName,PrimarySMTPAddress | export-csv .\users_without_membership.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  
🖖
Gruß Katrin
Gwaihir
Gwaihir 07.11.2023 aktualisiert um 09:34:50 Uhr
Goto Top
Super, vielen lieben Dank!

Ich überlege gerade, ob es besser ist, den String (AV) in ein anderes Feld innerhalb des Verteilers zu verstecken. Ich glaube wenn ich den Namen eines bestehenden Verteilers verändere, kann der User ihn nicht mehr finden, bzw. Outlook meckert rum, dass der Verteilername ungültig sei. Dann tausche ich doch einfach "Name" gegen "Description" aus, richtig? Dann kann ich den String in die Beschreibung aufnehmen. Das merkt niemand...

Script bricht gerade ab:
Get-ADPrincipalGroupMembership : Der Server konnte die Anforderung aufgrund eines internen Fehlers nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie
entweder IncludeExceptionDetailInFaults (über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu
senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET Framework SDK-Dokumentation, und überprüfen Sie die Serverablaufverfolgungsprotokolle.
In Zeile:1 Zeichen:76
+ ... ited | ?{!((Get-ADPrincipalGroupMembership $_.DistinguishedName).Name ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=XXX/O...XXX,DC=loc:ADPrincipal) [Get-ADPrincipalGroupMembership], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADPrincipalGroupMembership

498 Zeilen hat er aber geschrieben, müssten aber etwa 1800 sein.
8030021182
8030021182 07.11.2023 aktualisiert um 09:47:20 Uhr
Goto Top
Zitat von @Gwaihir:
Ich überlege gerade, ob es besser ist, den String (AV) in ein anderes Feld innerhalb des Verteilers zu verstecken.
Dann überleg mal...
Dann tausche ich doch einfach "Name" gegen "Description" aus, richtig?
Nein. Musst du dann zusätzlich mit Get-ADGroup die Details der Gruppe abfragen.
Script bricht gerade ab:
Fixe deinen Server.
Gwaihir
Gwaihir 07.11.2023 um 09:53:18 Uhr
Goto Top
Fehler gefunden. Ein Postfach hatte ein "/" im Namen. Ist korrigiert.

Fertig überlegt, Description ist mir lieber. Wie muss ich dann Get-ADGroup reinbauen?
8030021182
8030021182 07.11.2023 aktualisiert um 09:57:35 Uhr
Goto Top
Fertig überlegt, Description ist mir lieber. Wie muss ich dann Get-ADGroup reinbauen?
Get-Mailbox -RecipientTypeDetails Usermailbox -ResultSize unlimited | ?{!(Get-ADPrincipalGroupMembership $_.DistinguishedName | ?{(Get-ADGroup $_.DistinguishedName -Properties Description).Description -like '*(AV)*'})} | select Name,SamAccountName,PrimarySMTPAddress | export-csv .\users_without_membership.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8    
Gwaihir
Gwaihir 07.11.2023 aktualisiert um 10:32:24 Uhr
Goto Top
Nochmals vielen lieben Dank! Eine letzte Anpassung bräuchte ich noch... da sind noch mehr Postfächer mit einem "/" im Namen... der der das gemacht hat, gehört gesteinigt... kann ich am Anfang bei Get-Mailbox irgendwo einen Filter setzen, dass er Mailboxen mit einem "/" im Namen ausschließt?

Wenn ich mal wieder mehr Zeit habe, werde ich mir mal ein Buch für solche Scripts besorgen...
8030021182
Lösung 8030021182 07.11.2023 aktualisiert um 11:05:12 Uhr
Goto Top
Eine letzte Anpassung bräuchte ich noch...
Na mal sehen, wers glaubt ... 🤞
kann ich am Anfang bei Get-Mailbox irgendwo einen Filter setzen, dass er Mailboxen mit einem "/" im Namen ausschließt?
Get-Mailbox -Filter "Name -notlike '*/*'" -RecipientTypeDetails Usermailbox -ResultSize unlimited | ........  
Gwaihir
Gwaihir 07.11.2023 aktualisiert um 13:54:17 Uhr
Goto Top
Er meckert zwar immer noch einen User an (Verzeichnisobjekt nicht gefunden), aber die umgekehrte Richtung "zeige mir alle User MIT dem (AV) String in den Verteilern an" klappt wunderbar. Habe den String gerade in die Beschreibung des IT-Verteilers gesetzt und er zeigt mir dann eine Liste aller IT-User an. Sehr gut! Die eigentliche Richtung bekomme ich dann sicher noch alleine hin, eventuell stolpert er nicht mehr über den ein oder anderen User, wenn er nicht mehr ausgegeben wird, nachdem ich den String (AV) noch mehr in die Verteiler geschrieben habe...

Nochmals ein großes Dankeschön!
Gwaihir
Gwaihir 08.11.2023 aktualisiert um 15:07:37 Uhr
Goto Top
Doch noch eine Anpassung nötig face-smile Er gibt mir aktuell Postfächer aus, die zu inaktiven AD-Accounts gehören. Ich müsste also noch einschränken, dass die Postfächer zu aktiven AD-Accounts gehören.

Habe auf die Schnelle nur den Weg über LastLogontime gefunden, sieht so aus:

Get-Mailbox -Filter "Name -notlike '*/*'" -RecipientTypeDetails Usermailbox -ResultSize unlimited | Get-MailboxStatistics | Where{$_.Lastlogontime -gt (Get-Date).AddDays(-120)} | ?{!(Get-ADPrincipalGroupMembership $_.DistinguishedName | ?{(Get-ADGroup $_.DistinguishedName -Properties Description).Description -like '*(AV)*'})} | select Name,SamAccountName,PrimarySMTPAddress | export-csv c:\temp\users_without_membership.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Das wirft nach ein paar Minuten aber den Fehler, dass "Identity" nicht überprüft werden könne, weil NULL oder leer.

Was mach ich da falsch?

EDIT:

Ich probiere es mal mit:

Get-Mailbox -Filter {Name -notlike '*/*' -and HiddenFromAddressListsEnabled -ne $True} -RecipientTypeDetails Usermailbox -ResultSize unlimited | ?{!(Get-ADPrincipalGroupMembership $_.DistinguishedName | ?{(Get-ADGroup $_.DistinguishedName -Properties Description).Description -like '*(AV)*'})} | select Name,SamAccountName,PrimarySMTPAddress | export-csv c:\temp\users_without_membership.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8