我有一个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 关注
- 452 浏览
添加回答
举报
0/150
提交
取消