我无法让Invoke-WebRequest遵循重定向的网址。
有问题的网址是Konica Bizhub打印机的管理页面,我正在尝试检索其状态信息。
据我所知,重定向流程如下:
access=SYS_INF
使用具有只读访问权限的通用用户帐户记录Web会话(对我来说没问题)。
这是我现在正在使用的代码:
$userAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
$url = "http://1.1.1.1/wcd/index.html?access=SYS_INF"
$req = Invoke-WebRequest -Uri $url -UserAgent $userAgent
write-host $req
产生这个输出:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML lang="en">
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta content="text/javascript" http-equiv="Content-Script-Type">
<link rel="stylesheet" type="text/css" href="/wcd/default.css">
<script type="text/javascript" src="/wcd/init.js"></script>
<noscript>
<meta http-equiv="refresh" content="0; URL=/wcd/js_error.xml">
</noscript>
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#000000" ALINK="#ff0000" VLINK="#000000" onload="init('/wcd/system_device.xml','wcd','usr=S_INF;','','param=;',0);">
</BODY>
</HTML>
行init('/wcd/system_device.xml...
表示该页面应该加载system_device.xml
页面,但它不会发生。我怀疑这不是正常的重定向,但我不知道如何让PS跟随最终的URL。
我知道access=SYS_INF
需要成为第一个网址,以便用户可以登录,然后可以呈现system_device.xml
。所以你不能直接跳到http://1.1.1.1/wcd/system_device.xml
并以这种方式加载XML。
我还尝试将会话保存到变量并再次使用其他webrequest调用它无效:
$userAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
$url = "http://1.1.1.1"
$req = Invoke-WebRequest -Uri $url -SessionVariable session -UserAgent $userAgent
$req2 = Invoke-WebRequest -Uri $url -WebSession $session
write-host $req2
与上述类似的输出除了这条线不同:
<BODY BGCOLOR="#ffffff" LINK="#000000" ALINK="#ff0000" VLINK="#000000" onload="location.replace('/wcd/index.html');" >
任何建议都将不胜感激 - 谢谢!
答案 0 :(得分:0)
像您一样,我无法使用 Invoke-WebRequest 从 Konica Minolta bizhub 获取我需要的信息,而是使用 InternetExplorer.Applcation ComObject 获取我需要的详细信息并重定向到 JavaScript init。
# Create Internet Explorer ComObject
$ie = New-Object -ComObject InternetExplorer.Application
# Save the Window Handle for later use
$IEWindowHandle = $ie.HWND
# Navigate to our URL in this case
# "http://1.1.1.1/wcd/index.html?access=SYS_INF"
$ie.Navigate2($url)
此外,如果您收到 RPC_E_DISCONNECTED,您可能需要重新连接到 IE 窗口句柄
$ShellApp = New-Object -ComObject Shell.Application
try
{
$EA = $ErrorActionPreference; $ErrorActionPreference = 'Stop'
$RecoveredIE = $ShellApp.Windows() | Where-Object {$_.HWND -eq $IEWindowHandle}
}
catch
{
# Shell.Application may not find the window immediately, sleep 500ms
Write-debug "Window Handle not Found, Attempting reconnect in 500ms"
Start-Sleep -Milliseconds 500
try
{
$RecoveredIE = $ShellApp.Windows() | Where-Object {$_.HWND -eq $IEWindowHandle}
}
catch
{
Write-debug "Could not reconnect InternetExplorer.Application ComObject"
$RecoveredIE = $null
}
}
finally
{
$ErrorActionPreference = $EA
$ShellApp = $null
}