Во-первых, ошибки, выданные 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
}