2009-08-24 19 views
3

Ich muss AD abfragen, um festzustellen, ob ein Benutzerkonto deaktiviert ist.SQL-Abfrage für deaktivierte Active Directory-Konten

eine ähnliche Abfrage in den Antworten verwendet Mit here

SELECT * 
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user'') 

Ich glaube, um zu bestimmen, ob ein Konto deaktiviert ist, ich habe irgendwie das Useraccountcontrol-Feld verwenden. Ich habe einige Dinge ausprobiert, aber sie scheinen nicht zu funktionieren:

WHERE userAccountControl & 2 <> 0 

Antwort

4

Anscheinend hat es funktioniert ... das wäre eine ID-10-T sein: p

5

Wie wäre:

SELECT sAMAccountName 
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName, userAccountControl 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user''') 
WHERE userAccountControl & 2 <> 0; -- disabled 
6

Innenopenquery():

UND '' Useraccountcontrol: 1.2.840.113556.1.4.803: '' <> 2

SELECT * 
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user'' 
AND ''userAccountControl:1.2.840.113556.1.4.803:''<>2) 
+0

Der obige Code gibt aktive Benutzer zurück. Tolle Lösung. Es ist viel besser, innerhalb von OPENQUERY zu verwenden, aufgrund der von ADSI auferlegten Grenze von 1000 Zeilen. – JiggsJedi

+3

1.2.840.113556.1.4.803 ist der Code für eine BitWise UND-Operation 1.2.840.113556.1.4.804 ist der Code für eine BitWise OR-Operation Nur für den Fall, dass jemand sich wunderte, warum dort eine seltsame Zahl war und was es bedeutete. Auch dies ist die bessere Lösung für die Gründe, die der vorherige Kommentar angibt. – Matt

+0

Arbeitete wie ein Charme. Vielen Dank! – Lumberjack

Verwandte Themen