API 响应代码在 powershell 脚本中无效

API response code is invalid in powershell script

我的 Web 应用程序存在严重的应用程序池问题。有时,我的 API 应用程序会给出 500 个错误,并且不会为任何请求发送任何响应。据我所知,没有逻辑或其他 运行 时间错误,到目前为止我无法确定该问题的根本原因。一旦我回收了应用程序池(应用程序池并未在此处停止),API 又开始工作了。

因此,在我找到该问题的确切根本原因之前,我需要 运行 计划的 powershell 脚本,它可以在 API 未正确响应时回收应用程序池。因此,我在 API 应用程序中创建了一个测试端点,我的计划是每 10 分钟调用一次该端点并检查 API 是否正常工作。

尽管 API 给出了 400 或 500 个错误,但我在 powershell 脚本中得到 200 作为响应代码。您可以在下面看到 ps-1 脚本,此处附有响应。

$HTTP_Request = [System.Net.WebRequest]::Create('http://api.employeeportal.com/V1/ApiStatus/Test?key=*****')
$error_count = 0;


for ($i=1; $i -le 3; $i++)
{
    $HTTP_Response = $HTTP_Request.GetResponse()
    $HTTP_Status = [int]$HTTP_Response.StatusCode

     Write-Host $HTTP_Status
    
    If ($HTTP_Status -eq 200) {           
        break
    }
    Else {
        $error_count++
        Write-Host "Error!"
    }
}

Write-Host $error_count
If($error_count -eq 3){
    Write-Host "App pool downn!!! RESTART--->>>"
}


If ($HTTP_Response -eq $null) { } 
Else { $HTTP_Response.Close() }

为什么我得到 200 状态,即使实际响应是 404?有没有更好的方法来做到这一点?请帮忙!

谢谢

我终于想出了一个方法来做到这一点。感谢@Otter,我再次使用 -ErrorVariable 变量尝试了相同的方法并且它起作用了。如果有人正在寻找同类问题的答案,这里就是我的答案。

在解决方案中,我发送了 3 个请求以确保服务器正在响应。如果所有 3 个请求都出现服务器错误,那么我需要重新启动应用程序池。我还记录了我得到的服务器错误以供进一步参考。所以这将是一个完整的答案(我想是这样:))

$Logfile = "C:/Errors/log.log"
$error_count = 0;
$error_message = "";

function LogWrite
{
    Param([string]$logstring)
    Add-content $logfile -value $logstring
}

for ($i=1; $i -le 3; $i++)
{
    Invoke-RestMethod http://api.employeeportal.com/V1/ApiStatus/Test?key=***** -ErrorVariable myerror
    $statusCode = [int]$myerror.ErrorRecord.Exception.Response.StatusCode
 
    If($statusCode -ge 500){
        $error_count++  
        $error_message = $myerror.ErrorRecord.Exception.ToString() 
    }
    else{
        break
    }
}

If($error_count -eq 3){
    Restart-WebAppPool -Name "name of your app-pool"
    LogWrite "====== APP-POOL RESTARTED..!!! ======="
    LogWrite $(Get-Date)
    LogWrite $error_message
    LogWrite "=============================================="
}