我有一个PowerShell脚本导航到我们内部网上的(可能是)经典ASP页面,以停止在我们的服务器上运行的Windows服务,作为该服务的部署过程的一部分(并在部署新文件后重新启动它).它运行良好,直到我们最近升级到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 }
Run Code Online (Sandbox Code Playgroud)
现在,当我运行脚本时,它成功启动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
Run Code Online (Sandbox Code Playgroud)
当我在PowerShell中进行调查时,我发现如果我创建IE ComObject,它首先具有有效属性,但是当我导航到服务控制页面时,所有属性都为空(几乎就像ComObject消失了一样? ).例如,在HWND属性具有有效值之前,但现在它为null($ie.hwnd -eq $null返回true).导航到页面时,PowerShell中没有显示错误.
我查看了一些类似的 问题,但第一个问题与我的情况不符(在我的情况下Document属性为null),而对于后者,IE9默认为Intranet站点的兼容模式.我保存了ASP页面并通过w3c验证器运行它并且它抛出了一些错误(尽管没有与我正在尝试处理的元素相关).不幸的是我无法解决这些问题.其他网站似乎没有这个问题.对问题可能存在的任何疑问以及对解决方案的建议?