Powershell WebScraping 和终止异常处理
Powershell WebScraping and Terminating Exception Handling
我正在使用 powershell 检查几个不同站点的数据。如果站点今天没有数据,它将抛出 NullReferenceException。我希望脚本输出没有数据的消息,然后继续访问其他站点而不会停止。
在 Java 中,我可以简单地 try/catch/finally,但 Powershell 表现不佳。
try {
$webRequest = Invoke-WebRequest -URI "http://###.##.###.##:####/abcd.aspx?"
} catch [System.NullReferenceException]{
Write-Host "There is no data"
}
完整的错误显示在控制台中,而 Write-Host 从未实际出现。
try {
$webRequest = Invoke-WebRequest -URI "http://host/link" -erroraction stop
}
catch [System.NullReferenceException]{
Write-Host "There is no data"
}
Powershell 区分终止错误和非终止错误,要使 catch 起作用,您需要终止错误。 https://blogs.technet.microsoft.com/heyscriptingguy/2015/09/16/understanding-non-terminating-errors-in-powershell/
UPD:要获取异常类型,在收到错误后只需执行以下操作:
$Error[0].Exception.GetType().FullName
然后你用它来捕获
之后的特定错误
要继续处理 invoke-webrequest 的特定错误,您可以这样做:
try { Invoke-WebRequest "url" }
catch { $req = $_.Exception.Response.StatusCode.Value__}
if ($req -neq 404) { do stuff }
这可能是因为异常可能不是空引用异常。我最初认为这是一个 Non-Terminating 错误,但 invoke-webrequest 抛出一个终止错误。
在这种情况下,您可以简单地尝试(不捕获特定的异常类型)
--根据 OP 评论编辑--
try
{
Invoke-WebRequest -URI "http://doc/abcd.aspx?" -ErrorAction Stop
}
catch
{
if($_.Exception.GetType().FullName -eq "YouranticipatedException")
{
Write-Host ("Exception occured in Invoke-WebRequest.")
# You can also get the response code thru "$_.Exception.Response.StatusCode.Value__" if there is response to your webrequest
}
我正在使用 powershell 检查几个不同站点的数据。如果站点今天没有数据,它将抛出 NullReferenceException。我希望脚本输出没有数据的消息,然后继续访问其他站点而不会停止。
在 Java 中,我可以简单地 try/catch/finally,但 Powershell 表现不佳。
try {
$webRequest = Invoke-WebRequest -URI "http://###.##.###.##:####/abcd.aspx?"
} catch [System.NullReferenceException]{
Write-Host "There is no data"
}
完整的错误显示在控制台中,而 Write-Host 从未实际出现。
try {
$webRequest = Invoke-WebRequest -URI "http://host/link" -erroraction stop
}
catch [System.NullReferenceException]{
Write-Host "There is no data"
}
Powershell 区分终止错误和非终止错误,要使 catch 起作用,您需要终止错误。 https://blogs.technet.microsoft.com/heyscriptingguy/2015/09/16/understanding-non-terminating-errors-in-powershell/
UPD:要获取异常类型,在收到错误后只需执行以下操作:
$Error[0].Exception.GetType().FullName
然后你用它来捕获
要继续处理 invoke-webrequest 的特定错误,您可以这样做:
try { Invoke-WebRequest "url" }
catch { $req = $_.Exception.Response.StatusCode.Value__}
if ($req -neq 404) { do stuff }
这可能是因为异常可能不是空引用异常。我最初认为这是一个 Non-Terminating 错误,但 invoke-webrequest 抛出一个终止错误。
在这种情况下,您可以简单地尝试(不捕获特定的异常类型)
--根据 OP 评论编辑--
try
{
Invoke-WebRequest -URI "http://doc/abcd.aspx?" -ErrorAction Stop
}
catch
{
if($_.Exception.GetType().FullName -eq "YouranticipatedException")
{
Write-Host ("Exception occured in Invoke-WebRequest.")
# You can also get the response code thru "$_.Exception.Response.StatusCode.Value__" if there is response to your webrequest
}