2013-05-20 39 views
1

我想查詢AD服務器使用VBScript或WSH腳本查詢Active Directory和出口使用VBScript/WSH

這些領域

  • DN
  • 用戶ID
  • 某些字段,以獲取電子郵件
  • 公司
  • displayName

並將字段導出/輸出到文本文件。

我該如何做到這一點?

我從Linux背景出來,但需要將此作爲將要運行腳本的計算機運行的是Windows

使用Linux,

`ldapsearch -x -h hostserver -b "cn=contacts,dc=support,dc=com" CN="name"` 

回答

0

您需要使用的DirectoryServices namespace。這將使您可以訪問AD和所需的AP來查詢它。 Directory Searcher對象可用於排隊AD,並返回SerchResult collection。然後,您可以將字符串中的值作爲字符串讀取,並輕鬆寫入文本文件。希望這有幫助!

2

的常用方法是使用ADO和LDAP query檢索有關AD對象的信息:

Set rootDSE = GetObject("LDAP://RootDSE") 

base = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">" 
filter = "(&(objectClass=user)(objectCategory=Person))" 
attr = "distinguishedName,userid,mail,company,displayName" 
scope = "subtree" 

Set conn = CreateObject("ADODB.Connection") 
conn.Provider = "ADsDSOObject" 
conn.Open "Active Directory Provider" 

Set cmd = CreateObject("ADODB.Command") 
Set cmd.ActiveConnection = conn 
Set cmd.CommandText = base & ";" & filter & ";" & attr & ";" & scope 

Set rs = cmd.Execute 
Do Until rs.EOF 
    'do stuff with rs.Fields(fieldname).Value 
    rs.MoveNext 
Loop 
rs.Close 

conn.Close 

正如你可以看到這牽涉到大量的樣板代碼,所以我寫了this classADQuery),以簡化處理。自述文件包含一些示例。

如果你已經知道一個對象的專有名稱,你也可以直接檢索它是這樣的:

dn = "CN=Joe User,OU=Users,DC=example,DC=com" 
Set user = GetObject("LDAP://" & dn) 
WScript.Echo user.Get("displayName") 
WScript.Echo user.Get("mail") 
... 
+0

發生錯誤。目錄屬性無法在緩存中找到。 – user2285115

+0

哪個屬性?哪個代碼行產生了這個錯誤? –

+0

它的固定,但我如何檢查,如果DN有財產像一些DN有郵件,有些不Dont – user2285115

0
attr = "distinguishedName,userid,mail,company,displayName" 

用戶ID是不是廣告的一部分,它是sAMAccountName賦

Set cmd.CommandText = base & ";" & filter & ";" & attr & ";" & scope 

cmd.CommandText不是一個對象,它只是: cmd.CommandText = base &「;」 & filter &「;」 & attr &「;」 &範圍