Есть ли альтернатива «выходу» в PowerShell? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть сценарий синхронизации powershell, который синхронизирует 1 куб на двух разных серверах.

У меня установлен флаг для каждого из двух серверов, где могут быть три сценария:

1: ОБА серверы ИСТИНА

2: ОБА серверы ЛОЖЬ

3: 1 сервер ИСТИНА, другой сервер ЛОЖЬ

код выхода сценария один * 0 (успешная синхронизация)

код выхода сценария 2 1(ошибка синхронизации)

, но для сценария 3, если для одного сервера задано значение false, выход будет равен 1 в случае сбоя, но сценарий СЛЕДУЕТ продолжить работу, поскольку другой сервер доступен для синхронизации с кодом выхода0 для успеха.

проблема с выходом состоит в том, что он выходит из оставшейся части скрипта при его вызове.Я хотел бы, чтобы альтернатива этому механизму выхода охватила сценарий 3. Я обнаружил, что наиболее близким является следующее:

[ $PS1 ] && return || exit;

или

[ -v PS1 ] && return || exit

, но я не уверен, как передатькод там (0 или 1), не говоря уже о том, что я получил ошибки, что команда все равно не распознается.

Отсутствует имя типа после '['.

Маркер '||'не является допустимым разделителем операторов в этой версии.

Маркер '&&' не является допустимым разделителем операторов в этой версии.

Мне нужны коды выхода, потому что онипередается обратно в пакетный файл следующим образом:

    if %errorlevel% NEQ 0 GOTO :error
GOTO :end
:error
REM echo Exit Code: %ERRORLEVEL%
REM echo Failed!

EXIT /B %ErrorLevel%
:end
REM echo Exit Code: %ERRORLEVEL%
REM echo Success!

, от которого зависит сторонняя автоматизация (autosys) для отображения статуса.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Поскольку, похоже, альтернативы нет (код завершения передан без выхода), вместо этого я использовал условный инкремент, в котором

if ($i -eq 1) # 1 indicates that it ran successfully on just one server (scenario3)
{exit 0} # 0 for success

elseif ($i -gt 1) #if scenario 2 was the case, provide exit 1 for failure on BOTH servers
{ exit 1 }

else {exit 0} #for scenario 1

все мои сценарии теперь работают должным образом, решаяпроблема с кодом выхода

0 голосов
/ 27 сентября 2018

Проверьте эту статью.В нем подробно рассматривается тема:

https://weblogs.asp.net/soever/returning-an-exit-code-from-a-powershell-script

Я не хочу отнимать ответ Сергея (он несколько исчерпывающий), но в качестве подсказки он делает первый вывод:

«Не используйте выход для возврата значения из кода PowerShell, но используйте следующую функцию:

function ExitWithCode 
{ 
  param 
  ( 
      $exitcode 
  )
  $host.SetShouldExit($exitcode) 
  exit 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...