недавно мы переместили некоторые сценарии с 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.