我想使用Powershell在Web控制台上自动化访问点配置。
我是在Win8 / IE10上开发的,测试代码时一切正常。 不幸的是,我在开发/测试后收到了“生产系统”。 现在代码应该适用于Windows Server 2012 R2 / IE11。
这是我连接和登录访问点的代码(简化):
$IE = New-Object -ComObject "InternetExplorer.Application"
$IE.Visible = $true #1#
$IE.Navigate("192.168.0.100")
Write-Host $IE.LocationName
$IE.Document.GetElementByID("login-username").Value = "admin"
$IE.Document.GetElementByID("login-password").Value = "admin"
$IE.Document.GetElementByID("login-btn").Click()
Write-Host $IE.LocationName
出于调试原因,我通常会显示窗口(注释#1#)。 首先写入主机,显示正确的位置(“登录”)。 在第二个Write-Host,显示错误的位置(“about:blank”)。 在IE窗口中,您会看到正确的位置/标签名称(“AP”)。 似乎IE对象变得不可用,其他属性(如$ IE.Document。*)则不起作用。我必须手动关闭窗口。
我有两个解决方法:
到目前为止我的情景/测试:
其他人有想法尝试吗? 调试与解决方法一起工作,生产效率也很好(到目前为止)有不可见的窗口 - 但我想了解麻烦......
谢谢,最好的问候, KVO
答案 0 :(得分:0)
我将脚本部署到运行在IE11上的Windows Server 2012后,我遇到了这个问题。
原因是失去了Powershell创建的IE对象的处理程序。
我使用了PowerShell IE9 ComObject has all null properties after navigating to webpage创作的以下代码段来解决此问题。
function ConnectIExplorer() {
param($HWND)
$objShellApp = New-Object -ComObject Shell.Application
try {
$EA = $ErrorActionPreference; $ErrorActionPreference = 'Stop'
$objNewIE = $objShellApp.Windows() | ?{$_.HWND -eq $HWND}
$objNewIE.Visible = $true
} catch {
#it may happen, that the Shell.Application does not find the window in a timely-manner, therefore quick-sleep and try again
Write-Host "Waiting for page to be loaded ..."
Start-Sleep -Milliseconds 500
try {
$objNewIE = $objShellApp.Windows() | ?{$_.HWND -eq $HWND}
$objNewIE.Visible = $true
} catch {
Write-Host "Could not retreive the -com Object InternetExplorer. Aborting." -ForegroundColor Red
$objNewIE = $null
}
} finally {
$ErrorActionPreference = $EA
$objShellApp = $null
}
return $objNewIE
}
$HWND = ($objIE = New-Object -ComObject InternetExplorer.Application).HWND
$objIE.Navigate("https://www.google.com")
$objIE = ConnectIExplorer -HWND $HWND