Powershell COM InternetExplorer.应用程序行为
由于web服务方式似乎在不断变化,我们一直在努力解析HP保修网站 我遇到的问题是,我曾尝试使用InternetExplorerCOM,它的行为会因PS或IE版本的不同而有所不同,我不知道如何分辨 这是我正在测试的代码的核心部分。您需要找到要测试的HP序列号Powershell COM InternetExplorer.应用程序行为,powershell,com,internet-explorer-11,Powershell,Com,Internet Explorer 11,由于web服务方式似乎在不断变化,我们一直在努力解析HP保修网站 我遇到的问题是,我曾尝试使用InternetExplorerCOM,它的行为会因PS或IE版本的不同而有所不同,我不知道如何分辨 这是我正在测试的代码的核心部分。您需要找到要测试的HP序列号 $SerialNumber = "" $link = "http://h20564.www2.hp.com/hpsc/wc/public/find?rows%5B0%5D.item.serialNumber=" + $SerialNumber
$SerialNumber = ""
$link = "http://h20564.www2.hp.com/hpsc/wc/public/find?rows%5B0%5D.item.serialNumber=" + $SerialNumber + "&rows%5B0%5D.item.countryCode=US&submitButton=Submit"
Write-Verbose "Calling: $link"
$request = New-Object System.Net.WebClient
$request.UseDefaultCredentials = "True"
$request.Proxy = [System.Net.GlobalProxySelection]::GetEmptyWebProxy()
$results = $request.downloadstring($link)
if($results -match "Base Warranty") {
Write-Verbose "Results contain Warranty Data"
$results | Out-File "C:\Temp\Warranty.html" -Encoding ascii
$oIE = New-Object -ComObject InternetExplorer.Application
$oIE.Navigate("C:\Temp\Warranty.html")
$ohtmldoc = $oIE.Document
$rows = $ohtmldoc.documentElement.getElementsByClassName("hpui-normal-row")
$data = $rows[0].ChildNodes | ? {$_.TagName -eq "td"}
$ExpireDate = Date($data[4].InnerText)
} else {
Write-Verbose "Results do not contain Warranty Data"
$ExpireDate = ""
}
使用IE11 v11.212.10586.0在我的win 10机器上运行良好;PS5.0版
以两种不同的方式使用IE11 v11.0.9600.17873CO的win 2008 R2术语服务器失败;PS4.0版
DOM解析类名后,似乎没有从$rows[0]
变量填充ChildNodes
属性
除了以上是我的主要问题,
另一个2008 R2 Term server当我调用$oIE.Navigate
方法时,它会为被调用的链接打开一个IE窗口实例,然后其余命令失败,我还没有看到在我的其他两个环境中发生这种情况
如果您有任何想法,我将不胜感激,因为我不经常使用InternetExplorer.COM应用程序。我真的需要能够解析这个HTML内容来有效地获取表数据。我曾尝试放弃COM并以XML形式接收HTML内容,但HP在页面上有几行格式不正确的行,这一保修结果将起作用。一般来说,无论窗口是可见还是隐藏,都可以自动执行IE,因此只要显示窗口就不会导致一切失败。我想知道这是否是因为HP站点位于该终端服务器上的受信任站点/内部网/自定义列表中的某个位置,这会触发一个新的IE进程启动,以便它可以在不同的安全上下文中加载该站点,然后命令失败,因为它不再是连接到COM自动化的同一进程。看看你是否能在该服务器的IE设置中找到*.hp.com,与其他服务器不同。@TessellingHeckler我实际上也有类似的想法,因为该服务器确实位于不同的OU下,具有不同的GPO应用。我想我可以追踪到这一问题,但如果
ChildNode
问题一起战胜了这一问题,我不想浪费时间。谢谢你证实了我的想法!一般来说,不管窗口是可见的还是隐藏的,都可以实现IE的自动化,因此只要显示窗口就不会导致一切失败。我想知道这是否是因为HP站点位于该终端服务器上的受信任站点/内部网/自定义列表中的某个位置,这会触发一个新的IE进程启动,以便它可以在不同的安全上下文中加载该站点,然后命令失败,因为它不再是连接到COM自动化的同一进程。看看你是否能在该服务器的IE设置中找到*.hp.com,与其他服务器不同。@TessellingHeckler我实际上也有类似的想法,因为该服务器确实位于不同的OU下,具有不同的GPO应用。我想我可以追踪到这一问题,但如果ChildNode
问题一起战胜了这一问题,我不想浪费时间。谢谢你证实了我的想法!