Назад | Перейти на главную страницу

VBScript с ADsDSOObject больше не работает после перехода на Server 2008 R2

недавно мы переместили некоторые сценарии с 32-разрядного сервера Windows 2008 на новый 64-разрядный компьютер с Windows 2008 server R2. Теперь у нас возникли проблемы с несколькими скриптами VB. Возьмем, к примеру, вот это:

Set objcon = CreateObject("ADODB.Connection")
Set objrs = CreateObject("ADODB.Recordset")
Set objcom = CreateObject("ADODB.command")

Set objrootdse = GetObject("LDAP://RootDse")
strDN = "GC://" & objrootdse.Get("rootDomainNamingContext")

objcon.Provider = "ADsDSOObject"


objcon.Open "ADS Provider"
Set objcom.ActiveConnection = objcon
objcom.Properties("Page Size") = 10000
objcom.CommandText = "<" & strDN & ">;" & strFilter & ";adspath;subtree"

Set objrs = objcom.Execute

if objrs.eof and objrs.bof then //<-- fails here
...

Когда я запускаю этот сценарий, он терпит неудачу с исключением: «Фильтр поиска не может быть распознан», хотя он отлично работает на 32-битной машине. На новом сервере установлена ​​только веб-роль и роль файловых служб. Когда задействован провайдер ADsDSOObject, всегда возникают проблемы. Фильтр поиска LDAP в порядке, кстати.

Изменить: я также попытался запустить SysWow64 версии cmd.exe и cscript.exe с тем же результатом.

Изменить 2: пробовал еще кое-что. Оказывается, метод правильный, он не работает, когда встречает фильтр типа «(& (name =) (objectClass = computer))», это недопустимо, так как name не может быть пустым в строке LDAP. Забавно то, что другой сервер, казалось, проигнорировал эту ошибку и просто двинулся дальше.

Я решил это: по какой-то причине Vbscript на сервере nwe завершает работу при обнаружении недопустимого фильтра LDAP. Он никогда не делал этого на старом сервере, поэтому я думаю, что что-то в способе обработки этих ошибок изменилось с win 2008 r2.

Попробуйте запустить сценарий с версиями wscript.exe или cscript.exe, которые находятся в каталоге% windir% \ SysWOW64.