我们最近将一些脚本从 32 位 Windows 2008 服务器移至新的 Windows 2008 Server 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
...
当我运行此脚本时,它失败并出现异常:“无法识别搜索过滤器”,尽管它在 32 位计算机上运行良好。新服务器仅安装了 Web 角色和文件服务角色。当涉及 ADsDSOObject 提供程序时,似乎总是会出现一些问题。顺便说一下,LDAP 搜索过滤器没问题。
编辑:我也尝试运行 SysWow64 版本的 cmd.exe 和 cscript.exe,结果相同。
编辑 2:尝试了更多方法。结果发现该方法是正确的,当遇到像“(&(name=)(objectClass=computer))”这样的过滤器时,它会失败,这是无效的,因为 LDAP 字符串中的名称不能为空。有趣的是,另一台服务器似乎忽略了这个错误并继续前进。
答案1
尝试使用位于目录 %windir%\SysWOW64 中的 wscript.exe 或 cscript.exe 版本运行脚本
答案2
我解决了这个问题:由于某种原因,nwe 服务器上的 Vbscript 在遇到无效的 LDAP 过滤器时退出。它在旧服务器上从未发生过这种情况,所以我猜想处理这些错误的方式在 win 2008 r2 中发生了一些变化。