Active-Directory
移動到 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 ...
當我執行此腳本時,它失敗並出現以下異常:“無法辨識搜尋過濾器”,儘管它在 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 版本執行腳本