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 
    }