检查空 WebResponseObject

Check for null WebResponseObject

我将 Invoke-WebRequest 命令的响应存储在一个变量中:

$response = Invoke-WebRequest -Uri $URL -Body $body -Headers $headers -Method POST

如果我正在执行的处理已完成,我正在点击的 API 将 return 为 null,我需要检查它:

PS C:\Users\me> Write-Host $response
null

我已经尝试了以下所有测试:

If (!$response) {
    Write-Host 'Null 1.'
}
If ($response -eq 'null') {
    Write-Host 'Null 2.'
}
If ($response -eq $null) {
    Write-Host 'Null 3.'
}
If ($response -eq [string]::Empty) {
    Write-Host 'Null 4.'
}
If ($null -eq $response) {
    Write-Host 'Null 5.'
}

None 这些作品。我知道空字符串是一个远射,但我认为其他人应该工作。我在这里做错了什么?

$response 对象是一个 WebResponseObject(或派生自它的 class),它包含的不仅仅是响应的内容。这就是相等性检查失败的原因。

PS C:\Users\me> Write-Host $response

打印 null 因为 Write-Host 在幕后 $response 对象上调用 ToString(),returns Content 属性.对应ToString() implementation is here.

因此,如果响应中没有隐藏字符,则以下内容应该有效:

If ($response.Content -eq "null")
{
  Write-Host "Server returned null"
}