BlacksGood 5 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Moin Moin, ich möchte mein AD abfragen, welcher der User in dem Feld "E-Mail Adresse" nichts stehen hat und das Ergebnis in ein TXT-File ausgeben. Das ganze dient dazu, später zu wissen, bei welchem User das ggf. nachgepflegt werden muss. Hat jmd. ne Ahnung, wie der Befehl dazu aussehen könnte? LG Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Moin, wenn es auch ein CMD-Befehl sein darf, der das schneller kann: csvde -f keinemail.txt -u -r "(&(objectClass=user)(objectCategory=person)(!(mail=*)))" -l sAMAccountName Gruß, Nils Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Ich würd' eher eine CSV-Datei empfehlen. Die eignet sich besser für strukturierte Daten: Get-ADUser -Filter "enabled -eq '$true'" -Properties Mail -SearchBase 'OU=Verwaltung,OU=Anwender,DC=contoso,DC=com' | Where-Object {$null -eq $_.Mail} | Select-Object -Property *Name*,Mail | Export-Csv -Path 'Pfad zur CSV-Datei.csv' -NoTypeInformation Wenn Du unbedingt eine Text-Datei haben möchtest, pickst Du Dir einfach mit dem Select-Object den Namen raus, den Du exportieren möchtest und nimmst Out-File anstatt Export-CSV. (Ich habe hier das Attribut "Mail" nochmal mit in die Ausgabe eingeschlossen, um eine "visuelle Bestätigung des Fehlens" zu erhalten) Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Moin, wäre es nicht schlauer, das eigentliche Filterkriterium (Mail ist leer) gleich in den Filter-Parameter des Get-ADUser-Cmdlets aufzunehmen? Dann muss der DC nicht erst alle User zurückgeben, um dann den Client die rausfiltern zu lassen, die wir gar nicht haben wollen. Man stelle sich eine große Umgebung mit fünfstelligen Userzahlen vor, bei denen vielleicht zwanzig keine Mailadresse haben ... Gruß, Nils Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Ich würde nicht nur auf $null prüfen. Habe bei anderen Attributen festgestellt, daß ein im DSA geleertes Attribut nicht $null sondern "" ist. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 (bearbeitet) vor 18 Minuten schrieb NilsK: wäre es nicht schlauer, das eigentliche Filterkriterium (Mail ist leer) gleich in den Filter-Parameter des Get-ADUser-Cmdlets aufzunehmen? Wäre es. Definitiv. Da man aber dem Parameter -Filter keine komplexen Script-Blöcke, sondern nur einen "Filter-String" mitgeben kann, kenne ich keine funktionierende Syntax, wie man auf ein leeres Attribut filtern kann. Und meine LDAP-Kenntnisse sind leider auch quasi nicht vorhanden. bearbeitet 13. Juli 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Lt. Google müsste das mail -notlike "*" sein. Ein Ldap Filtrer wurde in #2 genannt und sollte so weitergenutzt werden. 1 Zitieren Link zu diesem Kommentar
BlacksGood 5 Geschrieben 13. Juli 2020 Autor Melden Teilen Geschrieben 13. Juli 2020 Vielen Dank an alle. Die Varriante von #2 funktioniert prima. Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Moin, freut mich, danke für die Rückmeldung! Gruß, Nils Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 (bearbeitet) vor 11 Stunden schrieb BOfH_666: Ich würd' eher eine CSV-Datei empfehlen. Die eignet sich besser für strukturierte Daten: Get-ADUser -Filter "enabled -eq '$true'" -Properties Mail -SearchBase 'OU=Verwaltung,OU=Anwender,DC=contoso,DC=com' | Where-Object {$null -eq $_.Mail} | Select-Object -Property *Name*,Mail | Export-Csv -Path 'Pfad zur CSV-Datei.csv' -NoTypeInformation Wenn Du unbedingt eine Text-Datei haben möchtest, pickst Du Dir einfach mit dem Select-Object den Namen raus, den Du exportieren möchtest und nimmst Out-File anstatt Export-CSV. (Ich habe hier das Attribut "Mail" nochmal mit in die Ausgabe eingeschlossen, um eine "visuelle Bestätigung des Fehlens" zu erhalten) Die schlechteste aller Skripting-Code Varianten - sorry... Filtern immer so weit links wie möglich, und Get-ADUser hat nen -LDAPFilter, dann filtert schon der DC und liefert nicht sinnloserweise alle User zurück... get-aduser -ldapfilter "(!(proxyAddress=*))" (LDAP-Attribut müßte proxyAddress sein, da kann ich mich täuschen.) Und dann noch - bei allen AD-Cmdlets - immer ein "| Select *" dahinter - warum, dazu muß ich noch nen Blogpost schreiben. Performance ist das Stichwort... (Faktor 100 etwa bei nachfolgenden Foreach-Durchläufen!) PS: Der -Filter Parameter von Get-ADUser filtert auf Client-Seite, da ist das Elend schon passiert. -LDAPFilter filtert auf der Server-Seite. bearbeitet 13. Juli 2020 von daabm Zitieren Link zu diesem Kommentar
NorbertFe 2.061 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 (bearbeitet) vor 57 Minuten schrieb daabm: LDAP-Attribut müßte proxyAddress sein, da kann ich mich täuschen. fast. ProxyAddresses. :) Wobei das aber nicht "mail" ist. bearbeitet 13. Juli 2020 von NorbertFe Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Jo, Exchange ist bei mir halt "out of Scope" - ich wußte nicht mal, daß "mail" ein eigenes Attribut ist, ich dachte bisher immer, daß in "mail" das steht, was in proxyAddresses groß geschrieben ist (was ich schon immer eigenartig fand für die Festlegung der primären Mailadresse...) Zitieren Link zu diesem Kommentar
NorbertFe 2.061 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 vor 1 Minute schrieb daabm: daß in "mail" das steht, was in proxyAddresses groß geschrieben ist Naja seitdem es keinen RUS (recipient update service) gibt, stimmt das nur bedingt. Es wird per update-recipient dort reingeschrieben (was mit großem SMTP im ProxyAddresses steht). Man kann das aber am Exchange vorbei wieder ändern, führt aber früher oder später zu lustigen Problemchen. ;) Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 vor einer Stunde schrieb daabm: Die schlechteste aller Skripting-Code Varianten - sorry... Filtern immer so weit links wie möglich, und Get-ADUser hat nen -LDAPFilter, dann filtert schon der DC und liefert nicht sinnloserweise alle User zurück... Nicht jeder ist in globalen verteilten AD-Strukturen mit 10.000-den von User-Objekten unterwegs oder so. Und wenn der Code nicht alle 30 Sekunden laufen soll, dann ist es meiner Meinung auch mal egal, ob das dann der effizienteste Code der Welt ist oder nicht. Für einen LDAP-Filter müsste ich "nachschlagen" - das fließt mir nicht aus den Fingern. Die Syntax von ober klimper ich einfach runter und das Ergebnis ist am Ende des Tages das gleiche. Der Aufwand wäre für mich also deutlich höher, ohne mir einen spürbaren Mehrwert zu liefern. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 13. Juli 2020 Melden Teilen Geschrieben 13. Juli 2020 Olaf, es gibt viel zu viel Code, der viel zu oft läuft und viel zu viele Daten abruft. AD dürfte eines der häufigsten Opfer sein, SQL kommt vermutlich kurz danach oder davor... "Egal" gibt es bei gutem Coding nicht. Get it right in the first place... Warum ich da so hinterher bin? Weil ich schon zu viele unheimliche Begegnungen der dritten Art mit den Auswirkungen von schlechtem Skripting hatte. Und das hatte mit dem Sizing der Infrastruktur nichts zu tun, nur mit der Qualität und Logik der Skripts. 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.