2009-08-24 10 views
3

Je dois interroger AD pour déterminer si un compte d'utilisateur est désactivé.Requête SQL pour les comptes Active Directory désactivés

En utilisant une requête similaire utilisée dans les réponses here

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

Je crois pour déterminer si un compte est désactivé, je dois utiliser le champ userAccountControl en quelque sorte. J'ai essayé plusieurs choses, mais ils ne semblent pas fonctionner:

WHERE userAccountControl & 2 <> 0 

Répondre

4

Apparemment, il a fait le travail ... ce serait un ID-10-T: p

5

Que diriez-vous:

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

intérieur OPENQUERY():

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

Le code ci-dessus renvoie les utilisateurs actifs. Une solution géniale. Beaucoup mieux à utiliser dans OPENQUERY en raison de la limite de 1000 lignes imposées par ADSI. – JiggsJedi

+3

1.2.840.113556.1.4.803 est le code pour une opération BitWise ET 1.2.840.113556.1.4.804 est le code pour une opération OU BitWise Juste au cas où quelqu'un se demandait pourquoi il y avait un nombre étrange là-bas et ce Cela signifiait. Aussi, c'est la meilleure solution pour les raisons indiquées dans le commentaire précédent. – Matt

+0

A travaillé comme un charme. Merci beaucoup! – Lumberjack

Questions connexes