В. Как использовать сценарий, чтобы проверить существование учетной записи пользователя или группы в 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%