В. Как использовать сценарий, чтобы проверить существование учетной записи пользователя или группы в Active Directory (AD)?

О.

'Проверить, что переданы все необходимые аргументы.
If Wscript.Arguments.Count < 3 Then 
    Wscript.Echo "Arguments    required. For 
example:" & vbCrLf _ 
        & "cscript searchad.vbs john user dc=savilltech,dc=com" 
    Wscript.Quit(0) 
End If 
 
strObjectName = Wscript.Arguments(0)
strObjectType = Wscript.Arguments(1)
strRootSearch = Wscript.Arguments(2)
 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 
 
Set objCommand = CreateObject("ADODB.Command") 
objCommand.ActiveConnection = objConnection 
  
objCommand.CommandText = _ 
    ";(&(objectCategory=" & strObjectType 
& ")" & _ 
    "(samAccountName=" & strObjectName & 
"));samAccountName,distinguishedName;subtree" 
 
Set objRecordSet = objCommand.Execute 
 
If objRecordset.RecordCount = 0 Then 
    WScript.Echo "sAMAccountName: " & strObjectName & " does not 
exist." 
    intReturnValue=0 
Else 
    WScript.Echo strObjectName & " exists." 
    objRecordSet.MoveFirst 
    Wscript.Echo "Distinguished Name: " & 
objRecordSet.Fields("distinguishedName").Value 
    intReturnValue=1 
End If 
 
objConnection.Close 

 

Чтобы использовать сценарий, достаточно ввести имя, тип и корневой каталог для поиска, как показано в двух следующих примерах:

D:projectsVBScripts>cscript searchad.vbs john user 
dc=savilltech,dc=com 
 
john exists. 
Distinguished Name: CN=John Savill,CN=Users,DC=savilltech,DC=com 
 
D:projectsVBScripts>cscript searchad.vbs johnnope user 
dc=savilltech,dc=com
 
sAMAccountName: johnnope does not exist.

 

Сценарий устанавливает значение %errorlevel% равное 1, если объект обнаружен, и 0, если он не обнаружен. Результат можно использовать в последующих сценариях или логике. Чтобы просмотреть результаты, следует использовать команду "echo %errorlevel%" после выполнения сценария.

Аналогично, можно изменить сценарий для поиска по стандартному имени (CN) вместо samAccountName (или любому другому, в соответствии с потребностями) в строке CommandText. Кроме того, если указать универсальный символ для поиска, и сценарий сообщит, о существовании объекта, то можно составить цикл на случай, если такой объект не один. В следующем исходном тексте показано, как изменить сценарий начиная со строки CommandText:

objCommand.CommandText = _ 
    ";(&(objectCategory=" & strObjectType 
& ")" & _ 
    "(cn=" & strObjectName & 
"));sAMAccountName,cn,distinguishedName;subtree" 
  
Set objRecordSet = objCommand.Execute 
 
If objRecordset.RecordCount = 0 Then 
    WScript.Echo "sAMAccountName: " & strObjectName & " does not 
exist." 
    intReturnValue=0 
Else 
    WScript.Echo strObjectName & " matched" 
    Do Until objRecordSet.EOF 
        Wscript.Echo "Name: " & 
objRecordSet.Fields("sAMAccountName").Value & " Distinguished Name: " & 
objRecordSet.Fields("distinguishedName").Value 
        objRecordSet.MoveNext 
    Loop 
    intReturnValue=1 
End If 
  
objConnection.Close 
  
wscript.quit(intReturnValue)

 

Результат изменения показан в следующем примере выполнения и вывода:

D:projectsVBScripts>cscript searchad.vbs b* user "ou=Justice 
League,dc=savilltech,dc=com" 
 
b* matched 
Name: barry Distinguished Name: CN=Barry Allen,OU=Justice 
League,DC=savilltech,DC=com 
Name: bruce Distinguished Name: CN=Bruce Wayne,OU=Justice 
League,DC=savilltech,DC=com 
D:projectsVBScripts>echo %errorlevel%