如何更改Invoke-WebRequest的输出?

时间:2019-01-29 21:20:06

标签: powershell if-statement httprequest

我希望能够获得Invoke-WebRequest的结果,并让我的脚本在服务器未到达时打印“ Failed”(失败),或者在服务器到达时显示“ Online”(在线)。

这就是我要做的。

 $IW_Results = $Servers_to_Check | ForEach-Object { Invoke-WebRequest -Uri $_ }

 $err = $IW_Results | ?{$_.gettype().Name -eq "ErrorRecord"}
 if($err){
 Write-Output "Failed"
 }
 else {
 Write-Output "Online"
 }

如果可以访问服务器,我能够获得脚本以打印“在线”。但是,当无法访问它时,我的脚本将不会显示“失败”。相反,它将给我错误:

 Invoke-WebRequest : Unable to connect to the remote server
 At C:\Users\admin\Documents\VM-scripts\VM-tester.ps1:32 
 char:52
 + ... ts = $Servers_to_Check | ForEach-Object { Invoke-WebRequest -Uri $_ }
 +                                               ~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:Htt 
 pWebRequest) [Invoke-WebRequest], WebException
 + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe 
 ll.Commands.InvokeWebRequestCommand

如何获取脚本以打印出“失败”而不是此错误消息?

另外$Servers_to_Check变量是多个服务器

1 个答案:

答案 0 :(得分:1)

您需要尝试捕获

$Servers_to_Check = "google.com", "asdasdf.asdfaa.sdf","yahoo.com"
$IW_Results = $Servers_to_Check | ForEach-Object { 
    try{
        Invoke-WebRequest -Uri $_ | Out-Null
        "Online"
    }catch{
        "Failed"
    }
}

$IW_Results