【发布时间】:2019-07-27 00:14:10
【问题描述】:
我在 Mac OS X 10.14.5 上的 PowerShell Core v6.1.0 上运行代码。
我有一个网站列表,我正在尝试使用 Invoke-WebRequest 进行验证。假设该列表包含以下网站
http://www.google.com
http://www.microsoft.com
http://www.hp.com
https://go.microsoft.com/fwlink/?LinkID=835028 http://samanage.bz
http://samanage.agency
如果我使用下面的代码来验证网站是否可以访问,那么一切正常。
$sites = Get-Content ./Sites.txt
foreach ($site in $sites){
$request = Invoke-Webrequest $site
Write-Host "Status for $site is $($request.StatusDescription)."
}
在检查每个网站是否有效后,我想看看这些网站是否被重定向到某个地方,所以我添加了 try/catch 并将最大重定向限制为 0
$sites = Get-Content ./Sites.txt
foreach ($site in $sites){
try{
$request = Invoke-WebRequest $site -MaximumRedirection 0
$siteStatus = $request.StatusDescription
}
catch{
Write-Host "$site is being redirected"
$request = Invoke-WebRequest $site -Method HEAD
# I actually use regex to pull out the destination site
# from the Headers.Link attribute, but left it out for
# simplicity
$siteStatus = $request.Headers.Link
}
Write-Host "Status for $site is $siteStatus."
}
预期任何使用重定向的网站的第一个请求都会失败并被捕获到 catch 块中。然后请求将在没有重定向限制的情况下重新运行,并且可以从 Headers.Link 中提取重定向目标。
前四个条目的代码工作正常,但后两个没有正确遵循重定向,而是导致此错误:
Invoke-WebRequest : 响应状态码不表示成功:302(找到)
我已经尝试询问 Google,但没有发现当我在 catch 块中运行 Invoke-WebRequest 时会给出不同的结果。
有人知道是什么原因造成的吗?
【问题讨论】:
标签: powershell