迁移到Server 2008 R2后,带有ADsDSOObject的VBScript不再有效

我们最近将一些脚本从32位Windows 2008服务器移到了新的Windows 2008服务器R2 64位机器上。 现在我们遇到了一些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 ... 

当我运行这个脚本时,它会失败,例外:“searchfilter无法识别”,虽然它在32位机器上运行良好。 新服务器仅安装了Webangular色和文件服务angular色。 ADsDSOObject提供程序涉及时似乎总是有些麻烦。 LDAPsearchfilter是顺利的。

编辑:我也尝试运行SysWow64版本的cmd.exe和cscript.exe具有相同的结果。

编辑2:试了一些更多的东西。 事实certificate,这个方法是正确的,当它遇到像“(&(name =)(objectClass = computer))这样的filter时失败”,这是无效的,因为在LDAPstring中name不能为空。 有趣的是,其他服务器似乎忽略了这个错误,只是继续前进。

尝试运行位于%windir%\ SysWOW64目录中的wscript.exe或cscript.exe版本的脚本

我解决了这个问题:出于某种原因,服务器上的Vbscript在遇到无效的LDAPfilter时退出。 它从来没有这样做在旧的服务器上,所以我猜想这些error handling的方式改变了win 2008 r2。