VBScript возвращает 0 строк, когда ADSIEdit возвращает правильное количество строк - PullRequest
2 голосов
/ 11 мая 2011

Я бился головой об этом последние два дня или около того, и без особого успеха - независимо от того, что я пытаюсь.Когда я запускаю запрос для получения общих томов, который заканчивается определенным окончанием, я заставляю его работать должным образом в ADSIEdit - но не в моем VBScript.Действительно странно, поскольку я использую точно такой же запрос.

Запрос ADSIEdit настроен так:

  • Имя: Test
  • Root of Search: DC= реклама, DC = сервер, DC = com
  • Строка запроса: (& (objectCategory = volume) (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 

Надеюсь, кто-то может помочь.Я прочитал множество тем на эту тему, но потерпел неудачу со всеми без исключения: (

РЕДАКТИРОВАТЬ: я думаю, что прибил это к проблеме доверия / разрешения. Когда яЗапустите adfind (или dsquery) на компьютере AD, он возвращает правильное количество строк. Однако, если я запустил его на клиентском компьютере, он возвращает неправильное количество строк. Теперь возникает вопрос: how мне сделать, чтобы решить это?

СЕРВЕР:

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

1 Ответ

0 голосов
/ 19 мая 2011

@ Исход: ваш знак выхода - ошибка. Вы должны использовать «\ 5C» (верхний регистр), если вы хотите найти обратную косую черту. hier - ссылка для более подробной информации: http://www.rlmueller.net/CharactersEscaped.htm

...