![](/img/trans.png)
[英]The remote server returned an error : (401) Unauthorized - PowerShell - Microsoft Graph API
[英]“ The remote server returned an error: (401) Unauthorized ”
我正在尝试验证我的URL是否得到响应。 换句话说,我正在尝试检查身份验证是否已成功访问该站点。
我用了:
$HTTP_Request = [System.Net.WebRequest]::Create('http://example.com')
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
If ($HTTP_Status -eq 200) {
Write-Host "Site is OK!"
} Else {
Write-Host "The Site may be down, please check!"
}
$HTTP_Response.Close()
我得到了回应:
远程服务器返回错误:(401)未经授权。
但是之后我得到了:
网站还可以
这是否还可以? 如果没有,那是什么问题?
之所以可以,是因为重新运行命令,并且$HTTP_Response
包含上一次成功运行的对象。 将try / catch与正则表达式结合使用以提取正确的状态代码(并清理变量):
$HTTP_Response = $null
$HTTP_Request = [System.Net.WebRequest]::Create('http://example.com/')
try{
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
If ($HTTP_Status -eq 200) {
Write-Host "Site is OK!"
}
else{
Write-Host ("Site might be OK, status code:" + $HTTP_Status)
}
$HTTP_Response.Close()
}
catch{
$HTTP_Status = [regex]::matches($_.exception.message, "(?<=\()[\d]{3}").Value
Write-Host ("There was an error, status code:" + $HTTP_Status)
}
.Net HttpWebRequest.GetResponse()在非OK状态代码上引发异常,您可以在此处详细了解: .Net HttpWebRequest.GetResponse()在返回HTTP状态代码400(错误请求)时引发异常。
我认为会发生以下情况:
您正在尝试使用GetResponse()查询网页。 这将失败,因此以下语句将使用您在上一次运行中设置的值运行。 这将导致您描述的输出。
我个人倾向于在脚本中使用invoke-webrequest。 由于它支持所有通用参数(如Erroraction等),因此更易于处理错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.