2

私は過去 2 日間ほどこれに頭を悩ませてきましたが、何を試してもあまり成功していません。特定の語尾で終わる共有ボリュームを取得するクエリを実行すると、ADSIEdit では正しく動作しますが、VBScript では正しく動作しません。まったく同じクエリを使用しているので、本当に奇妙です。

ADSIEdit クエリは次のように構成されます。

  • 名前: テスト
  • 検索ルート: DC=ad、DC=サーバー、DC=com
  • クエリ文字列: (&(objectCategory=volume)(objectClass=volume)(cn=K_*))
  • クエリ範囲: サブツリー検索。

    • 検索結果: cn が K_ で始まる 11 件のレコード
    • 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 

誰かが助けてくれることを願っています。私はそれに関する数え切れないほどのトピックを読みましたが、すべてのトピックで失敗しました:(

編集:私はそれを信頼/許可の問題に突き止めたと思います。AD マシンで adfind (または dsquery) を実行すると、正しい行数が返されます。ただし、クライアント マシンで実行すると、間違った量の行が返されます。今の問題は、それを解決するにはどうすればよいですか?

サーバ:

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

AdFind V01.45.00cpp Joe Richards (joe@joeware.net) 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 (joe@joeware.net) 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 (joe@joeware.net) March 2011

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

1 Objects returned
4

1 に答える 1

0

@exodus: エスケープ記号がエラーです。バックスラッシュを検索する場合は、"\5C" (大文字) を使用する必要があります。hier は詳細へのリンクです: http://www.rlmueller.net/CharactersEscaped.htm

于 2011-05-19T06:51:09.340 に答える