我有一个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 }
现在当我运行脚本时,它成功启动了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没有显示任何错误。我查看了一些类似的问题,但第一个与我的情况不符(在我的情况下,
文档
属性为空),至于后者,IE9默认将内部网站设置为兼容模式。 我保存了ASP页面,并通过W3C验证器运行它,它会抛出一些错误(尽管没有与我正在处理的元素相关的错误)。不幸的是,我无法解决这些问题。其他网站似乎没有这个问题。关于可能的问题和解决方法,有什么疑虑吗?