Rundeck — код выхода из PowerShell

#windows #powershell #rundeck

Вопрос:

У меня есть скрипт, который проверяет, существует ли список путей в экземплярах Windows с помощью powershell.

Код:

 $args[0].Split(",") | ForEach {
     if ($(Test-Path "$_")){
         echo "True -> $_" >> C:Tempcheck_paths_status;
     }else{
         echo "False -> $_" >> C:Tempcheck_paths_status;
     }
}

if ((Get-Content "C:Tempcheck_paths_status" | select-string -pattern "False").length -EQ 0) {
    rm C:Tempcheck_paths_status;
    echo "All OK";
    exit 0
}else{
    Get-Content "C:Tempcheck_paths_status" | select-string -pattern "False";
    rm C:Tempcheck_paths_status;
    exit 1 ### Here is the problem
}
 

сценарий, который он вызывает с помощью Rundeck, и передайте список путей в comprobe
.script.ps1 C:,C:NonVAlidPath

Скрипт работает нормально, но не делает правильный код выхода, я получил эту ошибку:

 <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><S S="Error">At C:WINDOWSTEMP8323799-21235593-script.tmp.ps1:1 char:1_x000D__x000A_</S>

<S S="Error">  [OutputType([System.boolean])]_x000D__x000A_</S><S S="Error">  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_x000D__x000A_</S>
<S S="Error">Unexpected attribute 'OutputType'._x000D__x000A_</S><S S="Error">      CategoryInfo          : ParserError: (:) [], ParseException_x000D__x000A_</S><S S="Error">      FullyQualifiedErrorId : UnexpectedAttribute_x000D__x000A_</S><S S="Error"> _x000D__x000A_</S></Objs>

Failed: NonZeroResultCode: [pyWinRMexe] Result code: 1
Execution failed: 21235593 in project *********: [Workflow result: , step failures: {1=Dispatch failed on 1 nodes: [*********: NonZeroResultCode: [pyWinRMexe] Result code: 1]}, Node failures: {***********=[NonZeroResultCode: [pyWinRMexe] Result code: 1]}, status: failed]
 

Большое вам спасибо за поддержку.

** И извините за мой плохой английский.

Комментарии:

1. Установите строку вызова (powershell.exe) и расширение скрипта оболочки (.ps1) в вашей работе взгляните на это: github.com/rundeck-plugins/py-winrm-plugin/issues/…

2. Часто, когда в управляющем приложении выполняются сценарии powershell, вам приходится выходить и выражать коды, подобные этому: [system.environment]::Exit(1)

Ответ №1:

В PowerShell вы обычно используете throw или write-error для указания на неудачное выполнение. Если вы просто хотите вернуть значение, описывающее состояние выполнения, используйте return $value

Exit завершит сеанс.