отправка кода выхода без выхода из скрипта - PullRequest
0 голосов
/ 17 мая 2019

предположим, у меня есть 2 сервера. Допустим, я выполняю операцию на этих 2 серверах последовательно (для цикла), и я передаю код выхода в 3 сценариях:

2 servers success: exit 0
2 servers fail: exit 1
1 server fail 1 server success: exit 0

В настоящее время я использую этот exit 1 для возврата кода завершения в AutoSys (где у нас есть автоматизированные задания), чтобы указать на сбой, если что-то не так, и exit 0, чтобы указать на успех.

однако, это также завершает работу сценария, поэтому, где бы я ни выполнил эту команду, выполнение сценария будет прекращено.

это нормально в текущих трех сценариях, которые у меня есть, однако мы хотели бы изменить последний сценарий 1 server fail 1 server success: exit 0 на 1 server fail 1 server success: exit 1, в котором при сбое одного сервера, даже если другой сервер успешно, отправляет код ошибки.

это может сработать, как правило, если первый сервер успешно работает, а второй отказывает, потому что это конец сценария, так что его можно завершить. но в случае сбоя ПЕРВОГО сервера, но ДАЛЕЕ есть другой сервер, на котором будет выполняться операция, он завершит работу, не позволив операции выполнить на сервере2.

поэтому мне нужен способ выхода 1 (сбой) БЕЗ окончания операции сценария

1 Ответ

1 голос
/ 18 мая 2019

Я делаю такие вещи в файлах .bat.По номеру выхода вы можете определить, в каком задании произошла ошибка.Это похоже на установку битов в целых числах.

$err = 0

# 1st job
if (-not $?) { $err += 1 }

# 2nd job
if (-not $?) { $err += 2 }

# 3rd job
if (-not $?) { $err += 4 }

exit $err

Возможно, вы можете что-то сделать с $ error, но он содержит ошибки всех скриптов, запущенных в процессе powershell.

Вот еще одинметод, который я недавно использовал.Вы не можете сказать, какая команда допустила ошибку, но вы можете сказать, сколько ошибок есть во всем сценарии.

$errorcount = $Error.Count

Get-Childitem foo1
Get-Childitem foo2
Get-Childitem foo3

exit $Error.Count - $errorcount

Тогда, если бы все 3 не существовали, $ LASTEXITCODE был бы равен 3. Или% ERRORLEVEL%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...