Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Windows Forum — Scripting


Alles zum Thema System Administration Scripting — Q & A zum Thema Scripting: Batch, VBS, WMI, PowerShell


Antwort
     
Themen-Optionen
Alt 22.11.2011, 14:00   #1
Senior Member
 
Benutzerbild von PowerShellAdmin
 
Offline
Registriert seit: 03-2008
Ort: Frankfurt
Beiträge: 426
Powershell GET-ADUser Problem nur mit eMail Filtern ?

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
    Mit Zitat antworten
Alt 22.11.2011, 14:31   #2
Expert Member
 
Benutzerbild von NorbertFe
 
Online
Registriert seit: 07-2007
Beiträge: 15.999
Code:
Get-ADUser -Filter {EmailAddress -like "*"}
Sowas?

Bye
Norbert

Signatur
Frank, I never thought I'd say this again. I'm getting the pig!

    Mit Zitat antworten
Alt 22.11.2011, 14:48   #3
Senior Member
 
Benutzerbild von PowerShellAdmin
 
Offline
Registriert seit: 03-2008
Ort: Frankfurt
Beiträge: 426
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.
    Mit Zitat antworten
Alt 22.11.2011, 15:02   #4
Expert Member
 
Benutzerbild von NorbertFe
 
Online
Registriert seit: 07-2007
Beiträge: 15.999
Du hast im Technet gesucht?
Und da hast du das hier übersehen?
Get-ADUser

Bye
Norbert

Signatur
Frank, I never thought I'd say this again. I'm getting the pig!

    Mit Zitat antworten
Alt 23.11.2011, 07:10   #5
Senior Member
 
Benutzerbild von PowerShellAdmin
 
Offline
Registriert seit: 03-2008
Ort: Frankfurt
Beiträge: 426
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)
Code:
$username=$user.samaccountname
$searcher = new-object DirectoryServices.DirectorySearcher([ADSI]“”)$searcher.filter = “(&(objectClass=user)(sAMAccountName=$username))”
$founduser = $searcher.findOne()

Geändert von PowerShellAdmin (23.11.2011 um 10:23 Uhr).
    Mit Zitat antworten
Alt 23.11.2011, 12:07   #6
Senior Member
 
Benutzerbild von PowerShellAdmin
 
Offline
Registriert seit: 03-2008
Ort: Frankfurt
Beiträge: 426
so habe den Skript jetzt umgestellt und vereinfacht.
der code ausschnitt sieht etwa so aus

Code:
$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)

Geändert von PowerShellAdmin (23.11.2011 um 13:29 Uhr).
    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Get-ADUser & MemberOf BS_Chris Windows Forum — Scripting 1 14.01.2011 16:04
Problem mit eMail oder ein tieferes Problem? Ostfriese MS Exchange Forum 7 28.09.2009 10:53
Powershell New-QADuser Problem Monster1975 Windows Forum — Scripting 3 15.12.2008 16:16
Scripting - ADUser und Exchange 2k7 Posfach lector MS Exchange Forum 3 18.11.2008 00:13
Ereignisanzeige filtern, Ansicht filtern awolf Windows Forum — Allgemein 0 27.08.2007 10:36


Alle Zeitangaben in MEZ/CET. Es ist jetzt 15:16 Uhr. Seite generiert in 0,033 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang