Jump to content

Powershell GET-ADUser Problem nur mit eMail Filtern ?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben (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 von PowerShellAdmin
Geschrieben (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 von PowerShellAdmin
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...