因为Web服务方法似乎在不断变化,所以正在努力解析HP Warranty网站。
我遇到的问题是我试图使用互联网资源管理器和它的行为不同取决于某个地方的版本差异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机器上正常工作; PSVersion 5.0
失败获胜2008 R2使用IE11 v11.0.9600.17873CO的服务器以两种不同的方式运行; PSVersion 4.0
在解析ClassName之后,似乎没有从ChildNodes
变量填充$rows[0]
属性。
除了以上是我的主要问题,
另一个2008 R2 Term服务器,一旦我调用$oIE.Navigate
方法,它就会打开一个IE窗口的实例,用于被调用的链接然后其他命令失败,我还没有看到它在我的其他两个环境中发生
因为我不经常使用InternetExplorer.Application COM,所以我会非常感激。我真的只需要能够解析这个HTML内容以有效地获取表数据。我曾尝试放弃COM并以HTML格式提取HTML内容,但惠普在页面上有几个格式错误的行,这个保修结果会重新开始。