首页 > 解决方案 > 输出结果 Print Success and Failed without Exception error

问题描述

我正在尝试在成功和失败的情况下打印状态代码 200/401。

我的脚本正在使用状态码 200。但如果我想让我的令牌失败,请$StatusCode不要打印 401。

在传递一个参数的两种情况下,我都需要一些关于打印状态代码的建议。

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)" 仅适用于状态代码 200。

if ($response = (Invoke-WebRequest @Params -ErrorAction Stop)) {
    try {
        $Token = (($response.Content) | ConvertFrom-Json).Token
    } catch [System.Net.WebException] {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) ";
        $Message = " Message: $($_.Exception.Message)"
    }
} 

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"

我的$StatusCode应该适用于 200 和 401。

标签: powershellpowershell-2.0

解决方案


一方面,抛出的错误Invoke-WebRequest永远不会在您的代码中捕获。此外,代码片段的最后一行替换了该catch块可能已分配给的任何内容$StatusCode。将两个语句移到try块中。我会添加另一个catch来处理可能发生的其他异常。

改变这个:

if ($response = (Invoke-WebRequest @Params -ErrorAction Stop)) {
    try {
        $Token = (($response.Content) | ConvertFrom-Json).Token
    } catch [System.Net.WebException] {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) ";
        $Message = " Message: $($_.Exception.Message)"
    }
}

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"

进入这个:

try {
    $response = (Invoke-WebRequest @Params -ErrorAction Stop)
    $Token = (($response.Content) | ConvertFrom-Json).Token
    $StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"
} catch [System.Net.WebException] {
    $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) "
    $Message = " Message: $($_.Exception.Message)"
} catch {
    $StatusCode = 0
    $Message = " Message: $($_.Exception.Message)"
    # alternatively re-throw the exception by uncommenting below line
    #throw
}

如果您只想要状态代码 200 和 401 而没有其他状态代码,您可以执行以下操作:

try {
    $response = (Invoke-WebRequest @Params -ErrorAction Stop)
    $Token = (($response.Content) | ConvertFrom-Json).Token
    $StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"
} catch [System.Net.WebException] {
    if ($_.Exception.Response.StatusCode.Value__ -eq 401) {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) "
        $Message = " Message: $($_.Exception.Message)"
    } else {
        throw
    }
} catch {
    throw
}

推荐阅读