Mit Get-ADUser, dem ldapFilter und dem UserAccountControl-Flag filtern [Powershell]
Mit Get-ADUser, dem ldapFilter und dem UserAccountControl-Flag filtern [Powershell]

Heute schauen wir uns kurz eine Filtermöglichkeit mit dem Get-ADUser Commandlet an.

Wir können damit sehr rasch im Active Directory unsere Benutzer nach gewissen Kriterien filtern. Wollen wir uns zum Beispiel alle unsere aktiven User ausgeben lassen, können wir dies so erledigen:


Get-ADUser -Properties -Filter {enabled -eq $true}

Wollen wir hingegen die nicht aktiven, passen wir einfach das gesuchte Ergebnis auf “false” an.


Get-ADUser -Properties -Filter {enabled -eq $false}

Soweit so gut, doch was machen wir wenn wir detaillierter suchen wollen, wenn der normale Filter nicht ausreicht und wir auf den ldapFilter zurückgreifen müssen, oder wenn wir aufgrund eines andern Filterkriteriums auf den ldapFilter ausweichen mussten und gleichzeitig aber noch gern das Ganze auf nur aktive User anwenden wollen. Nun, dann machen wir das was wir eben mit dem -Filter machten, einfach mit dem -ldapFilter. Dazu brauchen wir nur die Dezimalwerte der entsprechenden Flags im AD.


Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=512)"

Erhalten wir nun mit dem eben gezeigten Filter auch wirklich alle aktiven Accounts? Leider nein. Denn wir müssen alle möglichen Flag Varianten abfragen um auch alle aktiven Benutzer zu erhalten. Hier merkt man, dass die Filterung viel detaillierter stattfindet wie mit dem normalen Filter.

Hier ein Auszug aus den Flags die wahrscheinlich am meisten gefragt sind, eine vollständige Liste erhält man über den unten stehenden Link zu Microsoft.

Wert Dezimal Flag
2 ACCOUNTDISABLE
16 LOCKOUT
512 NORMAL_ACCOUNT
65536 DONT_EXPIRE_PASSWORD
8388608 PASSWORD_EXPIRED

Komplette Liste bei Microsoft

MSDN zu User-Account-Control attribute

Bevor wir nun ein paar Beispiele auflisten, ist es wichtig zu wissen; die Flags sind kumulativ.

Normaler Account

 Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=512)" 

Normaler Account der deaktiviert ist

 Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=514)" 

Normaler Account bei dem das Passwort nicht abläuft

 Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=66048)" 

Normaler Account bei dem das Passwort nicht abläuft, der jedoch deaktiviert ist

 Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=66050)" 

Man müsste nun annehmen, dass diese Logik mit allen Flags so weitergeführt werden könnte. Doch uns viel auf, dass z.B. ein normaler Account, welcher einen LOCKOUT erfahren hat (gesperrt nach x mal falschem Passwort), somit den Wert 512 + 16 enthalten müsste. Doch ein normaler Account mit LOCKOUT weisst im AD unter dem Attribut UserAccountControl nach wie vor die 512 aus. Aus diesem Grund würde ich immer erst die Werte welche ich benötige mit ADSIEdit oder ähnlichen Tools überprüfen. Die verschiedenen Fälle simulieren und dann den Wert nachschauen. Microsoft beschreibt noch einen Hinweis bezüglich LOCKOUT, weisst da aber auf eine Windows 2003 Domäne hin. Dies prüfen wir hier nicht mehr extra, die dort erwähnten Attribute sind in unserer 2008 Domäne nicht zu finden auf dem Benutzerobjekt.

Der Microsoft Verweis auf das neue Attribut ms-DS-User-Account-Control-Computed

Möchte man erreichen den LOCKOUT Account mit dem Filter zu erreichen, sähe der Filter so aus.

 Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=512)(lockoutTime>=1)"

Da diese einzelnen Filter oft nicht ausreichen um an das Ergebnis zu gelangen, das man gerne hätte, kann der ldapFilter weiter ausgebaut werden.

Hiermit suchen wir aktive normale Accounts oder aktive normale Accounts bei denen das Passwort nicht abläuft.

 Get-ADUser -Properties * -ldapFilter "(|(useraccountcontrol=512)(useraccountcontrol=66048))" 

Im folgenden Beispiel müssen mehrere Parameter erfüllt sein für einen Treffer; Das AD Objekt muss der Kategorie Person entsprechen, der Klasse User, es muss sich um einen aktiven normalen Account handeln und er darf im Attribut Department nicht den Wert Informatik haben. Die Suche erfolgt ausschliesslich in der OU welche über SearchBase mitgegeben wird.

Get-ADUser -Properties * -ldapFilter "(&(objectCategory=person)(objectClass=user)(useraccountcontrol=512)(!(Department=Informatik)))" -SearchBase "OU=Meine_Benutzer,DC=contoso,DC=com"

Viel Spass beim Ausprobieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Buy now
WP2Social Auto Publish Powered By : XYZScripts.com