2009-07-07 3 views

ответ

6

Чтобы посмотреть на всех членов подразделению, попробуйте это ...

Set objOU = GetObject("LDAP://OU=YourOU,DC=YourDomain,DC=com") 
For each objMember in ObjOU ' get all the members' 

    ' do something' 

Next 

Чтобы сделать пользовательский поиск для DNs попробовать это ...

set conn = createobject("ADODB.Connection") 
Set iAdRootDSE = GetObject("LDAP://RootDSE") 
strDefaultNamingContext = iAdRootDSE.Get("defaultNamingContext") 
Conn.Provider = "ADsDSOObject" 
Conn.Open "ADs Provider" 

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user));distinguishedName,adspath;subtree" 
set objCmd = createobject("ADODB.Command") 
objCmd.ActiveConnection = Conn 
objCmd.Properties("SearchScope") = 2 ' we want to search everything 
objCmd.Properties("Page Size") = 500 ' and we want our records in lots of 500 

objCmd.CommandText = strQueryDL 
Set objRs = objCmd.Execute 

While Not objRS.eof 

    ' do something with objRS.Fields("distinguishedName")' 
    objRS.MoveNext 
Wend 
+0

Кен, если бы я хотел, чтобы получить значение "SamAccountName" для частности FirstName и LastName значение, основанное на первом примере, я бы Если ObjOU.FirstName = «Аланией» и ObjOU.LastName = «Smith», то sVariable = ObjOU.sAMAccountName будет ли это правильно? – Frank

+0

Лучшим способом было бы использовать конкретное имя/фамилию, которые вы ищете в запросе ... strQueryDL = "; (& (objectCategory = person) (objectClass = пользователь) (firstName = "Alan") (lastName = "Smith"); distinctName, adspath; поддерево " ... " делать что-то с objRS.Fields ("sAMAccountName") ' – KennetRunner

0

Вы хотите использовать Active Directory Service Interfaces (ADSI)

ADSI Scripting Primer - хорошее место, чтобы начать изучение и найти примеры. (кстати, эти ссылки относятся к Windows 2000, но действительны и для последующих версий Windows).

1

Мне пришлось запросить WinAD по имени пользователя oldskool, этот .vbs-скрипт печатает учетные записи пользователей.

  • Поиск по SamAccountName, используйте символ *
  • печать несколько атрибутов от каждого объекта пользователя
  • использования AccountType фильтра его самого оптимизированный способ итерации пользователя AD объектов

Тестового скрипт первым получает пользователь объект по полной линии, это просто пример. Вторая часть выполняет фактический запрос с помощью фильтра smith *.

WinADSearch.vbs

' c:> cscript -nologo script.vbs 
' c:> wscript script.vbs 
' http://msdn.microsoft.com/en-us/library/d6dw7aeh%28v=vs.85%29.aspx 

' WindowsAD queries 
' http://www.kouti.com/tables/userattributes.htm 

Option Explicit 
'On Error Resume Next 

Dim StdOut: Set StdOut = WScript.StdOut 

Dim objUser 
Set objUser = GetObject("LDAP://CN=Firstname Lastname,OU=Internal Users,OU=MyCompany,OU=Boston,OU=Root,DC=REGION1,DC=COM") 
println(objUser.givenName & " " & objUser.middleName & " " & objUser.lastName) 
println("name=" & objUser.name) 
println("displayName=" & objUser.displayName) 
println("userPrincipalName=" & objUser.userPrincipalName) 
println("sAMAccountName=" & objUser.sAMAccountName) 
println("distinguishedName=" & objUser.distinguishedName) 


println("") 
Dim conn, strQueryDL, strAttrs, objCmd, objRs, idx 

set conn = createobject("ADODB.Connection") 
conn.Provider = "ADsDSOObject" 
conn.Open "ADs Provider" 

strAttrs = "sAMAccountName,displayName,distinguishedName" ' get attributes 

'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person));" & strAttrs & ";SubTree" 
'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person)(objectClass=user));" & strAttrs & ";SubTree"  
'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person)(objectClass=user)(sAMAccountName=smith*));" & strAttrs & ";SubTree" 

strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (samAccountType=805306368)(sAMAccountName=smith*));" & strAttrs & ";SubTree" 

set objCmd = createobject("ADODB.Command") 
objCmd.ActiveConnection = Conn 
objCmd.Properties("SearchScope") = 2 ' search everything 
objCmd.Properties("Page Size") = 100 ' bulk operation 

objCmd.CommandText = strQueryDL 
println(objCmd.CommandText) 
Set objRs = objCmd.Execute 
idx=0 
do while Not objRS.eof 
    idx=idx+1 
    println(objRs.Fields("sAMAccountName") & "/" & objRs.Fields("displayName") & "/" & objRs.Fields("distinguishedName")) 
    if (idx>5) then exit do 
    objRS.MoveNext 
loop 
objRs.Close 
Conn.close 
set objRs = Nothing 
set conn = Nothing 
println("end") 


'******************************************************************** 
Sub println(ByVal str) 
    If (StdOut Is Nothing) Then Exit Sub 
    StdOut.WriteLine str 
End Sub 
Смежные вопросы