PowerShellAdmin 169 Geschrieben 22. November 2011 Melden Teilen Geschrieben 22. November 2011 Hallo ich zerbreche mir gerade den Kopf. Ich benötige daher etwa das: Get-ADUser -Filter {mail -ne ""} Ich benötige vorab einen Filter und keine spätere IF-Abfrage z.B. per Adsi. Warum: Weil ich per Get-ADUser nur Benutzer mit eMailadresse einlesen will. Hier werden im Anschluss verschiedene Attribute gesammelt-Ausschließlich von Benutzern mit eMailadresse. 1500 von ~7000 Benutzern haben eine eMail, daher würde dann der Skript anstatt ~20Min auf 7Min verkürzt werden. Grüße Funkypunk Zitieren Link zu diesem Kommentar
NorbertFe 2.066 Geschrieben 22. November 2011 Melden Teilen Geschrieben 22. November 2011 Get-ADUser -Filter {EmailAddress -like "*"} Sowas? Bye Norbert Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 22. November 2011 Autor Melden Teilen Geschrieben 22. November 2011 du bist klasse, dank dir :) Ich habe im Technet & google nach einer Lösung und es ist so einfach. Das Attribut heißt "mail", wieso verwendet der Filter wiederrum einen andern Bezeichner -.- ??? PS ist ja wirklich ein Komfort, aber man sucht zwischenzeitlich ewig nach solchen Kleinigkeiten. Zitieren Link zu diesem Kommentar
NorbertFe 2.066 Geschrieben 22. November 2011 Melden Teilen Geschrieben 22. November 2011 Du hast im Technet gesucht? ;) Und da hast du das hier übersehen? Get-ADUser Bye Norbert Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 23. November 2011 Autor Melden Teilen Geschrieben 23. November 2011 (bearbeitet) Tatsächlisch, wie konnte ich das übersehen :/ Mir ist aufgefallen dass das Performancenadelöhr wohl die Foreach Schleife ist, mit der ich durch die Benutzer gehe. Nehme an durch den unten folgenden Code ist die Performance entsprechend schlecht. foreach($object in $userlist) { ..... } in der Schleife greife ich auf verschiedene Attribute zurück, womöglich verursacht der folgende Code auch die Probleme. (email, telefon, aktiviert, vorgesetzter, guid, guid vorgesetzter) $username=$user.samaccountname $searcher = new-object DirectoryServices.DirectorySearcher([ADSI]“”)$searcher.filter = “(&(objectClass=user)(sAMAccountName=$username))” $founduser = $searcher.findOne() bearbeitet 23. November 2011 von PowerShellAdmin Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 23. November 2011 Autor Melden Teilen Geschrieben 23. November 2011 (bearbeitet) so habe den Skript jetzt umgestellt und vereinfacht. der code ausschnitt sieht etwa so aus $winUserList=Get-ADUser -Filter * -Properties telephoneNumber, mail, manager, userAccountControl #Schleife für alle Benutzer-fügt diese in das CSV-Array hinzu foreach($object in $winUserList) { # Für jeden Benuzer ein User-Objekt erneunt initialisieren $user = New-Object PSObject -Property @{ samaccountname=$object.samaccountname nachname=$object.GivenName vorname='' telefon=$object.Telephonenumber email=$object.mail vorgesetzter='' vorgesetzter_guid='' aktiv='' guid=$object.objectguid } #Übergibt Vorname-falls keiner vorhanden steht hier der Loginname if([string]$object.surname -eq '') { $user.vorname=$object.samaccountname } else { $user.vorname=$object.surname } #Übergibt ob der Mitarbeiter aktiv oder inaktiv ist if([string]$object.useraccountcontrol -band 0x2) { $user.aktiv=0 } else { $user.aktiv=1 } if($object.manager -ne $null) { $manager=Get-ADUser -Identity $object.manager $user.vorgesetzter=$manager.givenname $user.vorgesetzter_guid=$manager.objectguid } } So konnte ich die Zeit von 5,5Min auf 25Sekunden reduzieren... :) 1Problem bleibt noch, der Manager ist als Distinguishedname im User eingetragen, wie komme ich möglichst einfach an seinen Givenname und & GUID. edit: funktioniert mit get-aduser -identity (im coder ergänzt) - scheint ok - springt zwischen 25-80 Sekunden (VPN Abhängig) bearbeitet 23. November 2011 von PowerShellAdmin 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.