#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
завершит сеанс.