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