Powershell COM InternetExplorer.应用程序行为

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

由于web服务方式似乎在不断变化,我们一直在努力解析HP保修网站

我遇到的问题是,我曾尝试使用InternetExplorerCOM,它的行为会因PS或IE版本的不同而有所不同,我不知道如何分辨

这是我正在测试的代码的核心部分。您需要找到要测试的HP序列号

$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
问题一起战胜了这一问题,我不想浪费时间。谢谢你证实了我的想法!