2009-08-24 62 views
3

我需要查詢AD以確定是否禁用了用戶帳戶。已禁用Active Directory帳戶的SQL查詢

使用的答案here

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

我相信,以確定是否一個帳戶被禁用我必須以某種方式使用UserAccountControl領域中使用的類似查詢。我已經試過幾件事情,但他們似乎並不奏效:

WHERE userAccountControl & 2 <> 0 

回答

4

顯然它的工作......這將是一個ID-10-T:對

5

如何:

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

內部OPENQUERY():

AND '' 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

上面的代碼返回活動用戶。真棒解決方案。由於ADSI強加的1000行限制,在OPENQUERY內部使用更好。 – JiggsJedi 2014-06-02 17:19:55

+3

1.2.840.113556.1.4.803是BitWise AND操作的代碼 1.2.840.113556.1.4.804是BitWise OR操作的代碼 以防萬一有人想知道爲什麼在那裏有一個奇怪的數字以及什麼這意味着。 此外,這是更好的解決方案,因爲前面的評論說的原因。 – Matt 2014-07-17 14:42:00

+0

工作就像一個魅力。非常感謝! – Lumberjack 2018-02-16 20:27:26