我有一個PowerShell腳本,該腳本可導航到Intranet上的(大概)經典ASP頁,以停止在服務器上運行的Windows Service,作為該服務的部署過程的一部分(并在部署新文件后重新啟動它)。運行良好,直到我們最近升級到IE9。這是腳本。# Open service page in IE$ie = new-object -comobject InternetExplorer.Application$ie.visible = $true$ie.navigate($serviceUrl)while($ie.busy) { start-sleep 1 }# Stop service$ie.Document.getElementById("dropDownActionList").value = "Stop"$ie.Document.getElementById("buttonTakeAction").click()while($ie.busy) { start-sleep 1 }現在,當我運行腳本時,它可以成功啟動IE,但是會引發以下錯誤:You cannot call a method on a null-valued expression.At C:\Projects\ABC\Scripts\Deploy.ps1:85 char:28+ $ie.Document.getElementById <<<< ("dropDownActionList").value = "Stop" + CategoryInfo : InvalidOperation: (getElementById:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull當我在PowerShell中進行調查時,我發現如果創建IE ComObject,它首先具有有效的屬性,但是一旦導航到服務控制頁面,所有屬性均為null(幾乎就像ComObject消失了一樣? )。例如,在HWND屬性具有有效值之前,但現在它為null($ie.hwnd -eq $null返回true)。導航到頁面時,PowerShell中沒有顯示錯誤。我查看了一些類似的 問題,但是第一個與我的情況不匹配(在我的情況下該Document屬性為null),而對于后一個,IE9默認為Intranet網站的兼容模式。我保存了ASP頁,并通過w3c驗證程序運行它,它引發了一些錯誤(盡管沒有一個與我要處理的元素有關)。不幸的是,我無法解決這些問題。其他站點似乎沒有此問題。是否對可能的問題有任何懷疑,以及有關解決方法的建議?
2 回答

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
我只是通過這個工作。在關閉IE中的保護模式之前,我一直看到相同的行為。這似乎與從一個安全區域提交到下一個安全區域有關。因此,假設您的原始頁面位于Internet區域中且處于受保護模式下,則您提交到受信任區域或Intranet或任何其他區域中的頁面,好像COM上下文丟失了??赡苁枪室獾?。我將嘗試修復區域,并保持保護模式為開。
希望這可以幫助。
編輯:如果您以提升模式運行Powershell(以管理員身份運行),這也不是問題。
- 2 回答
- 0 關注
- 481 瀏覽
添加回答
舉報
0/150
提交
取消