Active-Directory

移動到 Server 2008 R2 後,帶有 ADsDSOObject 的 VBScript 不再工作

  • August 11, 2012

我們最近將一些腳本從 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
...

當我執行此腳本時,它失敗並出現以下異常:“無法辨識搜尋過濾器”,儘管它在 32 位機器上執行良好。新伺服器僅安裝了 Web 角色和文件服務角色。當涉及 ADsDSOObject 提供程序時,似乎總是有一些麻煩。順便說一句,LDAP 搜尋過濾器沒問題。

編輯:我還嘗試執行 cmd.exe 和 cscript.exe 的 SysWow64 版本,結果相同。

編輯2:嘗試了更多的東西。結果證明該方法是正確的,當遇到像“(&(name =)(objectClass = computer))”這樣的過濾器時它會失敗,這是無效的,因為名稱在LDAP字元串中不能為空。有趣的是,另一台伺服器似乎忽略了這個錯誤並繼續前進。

我解決了:由於某種原因,nwe 伺服器上的 Vbscript 在遇到無效的 LDAP 過濾器時退出。它從來沒有在舊伺服器上這樣做過,所以我猜這些錯誤的處理方式在 win 2008 r2 中有所改變。

嘗試使用位於目錄 %windir%\SysWOW64 中的 wscript.exe 或 cscript.exe 版本執行腳本

引用自:https://serverfault.com/questions/381471