2011-05-11 167 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