2011-05-11 88 views
2

過去兩天左右,我一直在抨擊我的頭,並且沒有太大的成功 - 無論我嘗試什麼。 當我運行查詢以檢索以特定結尾結束的共享卷時,我會在ADSIEdit中正常工作 - 但不能在我的VBScript中。真奇怪,因爲我使用完全相同的查詢。當ADSIEdit返回正確的行數時,VBScript返回0行

有Adsiedit查詢配置,像這樣:

  • 名稱:測試
  • 根的搜索:DC =廣告,DC =服務器,DC = com的
  • 查詢字符串:(&(objectCategory =體積)(objectClass = volume)(cn = K_ *))
  • 查詢範圍:子樹搜索。

    • 搜索結果:共有11條記錄,其中CN與K_
    • VBScript的結果開始:(!?!?)1個記錄

如果我更改查詢字符串(最後一部分)(uNCName = * \ 5cOst-gro))取而代之,這就是我真正想要的(我給出的第一個查詢字符串用於測試目的),在ADSIEdit中我得到7行返回 - 在我的VBScript中沒有!

這是我(目前)VBScript代碼:

Set objDomain = getObject("LDAP://RootDSE") 
Set objSysInfo = CreateObject("ADSystemInfo") 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Provider = "ADsDSOObject" 
objConnection.Open "Active Directory Provider" 
Set objCommand = CreateObject("ADODB.Command") 
Set objCommand.ActiveConnection = objConnection 

strDNSDomain = objDomain.Get("defaultNamingContext") 

objCommand.CommandText = "Select Name, uNCName, ManagedBy from "_ 
    & "'LDAP://DC=ad,DC=server,DC=com'" _ 
     & " where objectClass='volume' and uNCName = '*\5cOst-gro'" 
     'The below is not working either! 
'objCommand.CommandText = "<LDAP://DC=ad,DC=server,DC=com>;"_ 
' & "(&(objectCategory=volume)(objectClass=volume)(uNCName=*\5cOst-gro));"_ 
'  & "name,uNCName;subtree" 
Set objRecordSet = objCommand.Execute(, , adCmdTableDirect) 
avarGetRowsArray = objRecordset.GetRows(intNumRows, BkMrk) ' returns 0 too 
objRecordSet.MoveFirst ' Doesn't help 
If objRecordSet.Supports(adApproxPosition)=True Then 
    nrRecords=objRecordSet.RecordCount 
End If 
if not objRecordSet.EOF Then 
    do While Not objRecordSet.EOF 
     MsgBox "Match found! " & objRecordSet.Fields("name").Value, vbOKOnly, "Match found" 
     objRecordSet.MoveNext 
    Loop 
Else 
    MsgBox "No matches found. " & UBound(avarGetRowsArray), vbOKOnly, "No matches!" 
end If 

希望有人可以提供幫助。我已經read countless topics就可以了,但每個人都失敗:(

編輯:我想我已經把它釘在一個信任/權限問題上當我在AD機器上運行adfind(或dsquery)時,它返回正確的行數不過,如果我在客戶機上運行它,它返回行的金額錯誤,現在的問題是,如何我該怎麼辦來解決它

服務器:a。?

D:\Tests>adfind -c -f "(&(objectCategory=volume)(objectClass=volume)(uNCName=*\5 
cOst-gro))" 

AdFind V01.45.00cpp Joe Richards ([email protected]) March 2011 

Using server: ad.server.com:389 
Directory: Windows Server 2003 
Base DN: DC=ad,DC=server,DC=com 

7 Objects returned 

D:\Tests> 

客戶:

C:\tests>adfind -c -f "(&(objectCategory=volume)(objectClass=volume)(uNCName=*\5 
cOst-gro))" 

AdFind V01.45.00cpp Joe Richards ([email protected]) March 2011 

Using server: ad.server.com:389 
Directory: Windows Server 2003 
Base DN: DC= DC=ad,DC=server,DC=com 

0 Objects returned 

C:\tests>adfind -c -f "(&(objectCategory=volume)(objectClass=volume)(cn=K_*))" 

AdFind V01.45.00cpp Joe Richards ([email protected]) March 2011 

Using server: ad.server.com:389 
Directory: Windows Server 2003 
Base DN: DC= DC=ad,DC=server,DC=com 

1 Objects returned 
+0

在您的查詢中,您想要使用(uNCName = * \ 5cOst-gro)。 * \ 5對你的想法有什麼影響。我不知道是否有逃避的問題。 – geoffc 2011-05-11 16:33:49

+0

@geoffc \ 5c是反斜槓(\\)的替代品,我從ADSIEdit那裏獲得了它。換句話說,它會在這種情況下搜索* \ Ost-gro(例如,一個成功的命中將是ad.server.com \ shares \ Ost-gro) – Exodus 2011-05-11 17:38:56

+0

#Exodus所以我不知道是否逃避帳戶的差異ADSIEdit與VBScript。 – geoffc 2011-05-11 19:08:28

回答

0

@exodus:您的轉義符是錯誤。如果要搜索反斜槓,則必須使用「\ 5C」(大寫)。 hier是更多詳細信息的鏈接:http://www.rlmueller.net/CharactersEscaped.htm

+0

不幸的是,這並沒有幫助:( 我目前的解決方法是使用來自AD的導出的csv文件並迭代,但它不是**最佳**因爲有手動工作要記住,並且導出,csv文件每次添加或刪除一個組時 我仍然相當肯定,這與某些許可或類似的事情有關,我只是沒有時間徹底調查它。 – Exodus 2011-05-20 07:16:06