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

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

Link zu diesem Kommentar

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
Link zu diesem Kommentar

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

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...