Исключить завершающую ошибку из try / catch PowerShell - PullRequest
2 голосов
/ 20 апреля 2020

Мне сложно проверить, существует группа или нет через Rest API.

Позвоните в Api, чтобы проверить, существует ли группа. Мои логики c: используйте Invoke-RestMethod для вызова API. Если вызов API успешен (группа существует), он сохранит результат в «$ reader_response_success», если группа не существует, командлет завершится ошибкой, сведения об ошибке сохранятся в переменной Error «$ reader_response_failure».

В зависимости от того, какая переменная имеет значения, я могу заключить, существует группа или нет. Тем не менее, наша структура имеет реализацию Try / Catch. Таким образом, в случае, если группа не существует, весь сценарий останавливается.

Как я могу убедиться, что скрипт продолжит выполнение, даже если вызов API завершится неудачно. (Поскольку я знаю, что вызов API не будет выполнен, если группа не существует). Я дал $ errorAction как 'SilentlyContinue', но он останавливает выполнение скрипта.

function Test-CoeAzureInstancePowerBI{

param
(
    [Parameter (Mandatory = $true, ValueFromPipeline = $true)]
    $ServiceConfiguration
)

## TODO: Check if the Reader and Creator Group exists in dwgm 
# Checking if ReaderGroup exists
$Group = @{
GroupName = "ITGA_" + $ServiceConfiguration.ReaderGroup
}
$json = $Group | ConvertTo-Json 
$reader_response_success = Invoke-RestMethod 'https://api.corpinter.net/dwgm/v1/lookup/' -Headers $ServiceConfiguration.Headers -Method POST -Body $json -ContentType 'application/json' -ErrorVariable $reader_response_failure -ErrorAction SilentlyContinue
# In the above api call, 
# $reader_response_success contains data if the group exists
# $reader_response_failure contains data if the group does not exist
if($reader_response_success -eq $null) {$ServiceConfiguration.ReaderGroupExists = $False}

# Checking if ReaderGroup exists
$Group = @{
GroupName = "ITGA_" + $ServiceConfiguration.CreatorGroup
}
$json = $Group | ConvertTo-Json 
$creator_response_success = Invoke-RestMethod 'https://api.corpinter.net/dwgm/v1/lookup/' -Headers $ServiceConfiguration.Headers -Method POST -Body $json -ContentType 'application/json' -ErrorVariable $creator_response_failure -ErrorAction SilentlyContinue
# In the above api call, 
# $creator_response_success contains data if the group exists
# $creator_response_failure contains data if the group does not exist
if($creator_response_success -eq $null) {$ServiceConfiguration.CreatorGroupExists = $False}


## The instance should be SKIPPED only if both the ReaderGroup and CreatorGroup exist 
if($ServiceConfiguration.CreatorGroupExists -eq $true -and $ServiceConfiguration.ReaderGroupExists -eq $true){
    return $true
}else{
 return $False
}

}

1 Ответ

0 голосов
/ 20 апреля 2020

-ErrorAction SilentlyContinue будет продолжаться только при отсутствии ошибок. Так что вы, вероятно, получите ошибку завершения. Вы можете просто выполнить свою собственную обработку ошибок для этого конкретного командлета:

try {
    $reader_response_success = Invoke-RestMethod 'https://api.corpinter.net/dwgm/v1/lookup/' -Headers $ServiceConfiguration.Headers -Method POST -Body $json -ContentType 'application/json'
} catch {
    # Do some error handling here (probably nothing according to your code so far)
}

Сделайте то же самое для второго Invoke-RestMethod вызова.

...