Я работаю над сценарием развертывания для приложения поставщика. Он считывает XML-файл, в котором отображаются пути развертывания для различных сред, затем перебирает различные серверы, копирует правильные файлы и выполняет сценарий развертывания. Я хотел бы, чтобы сценарий завершился, если сценарий развертывания не работает. Сценарий развертывания — это сценарий Perl, и мне нужно перед этим вызвать .bat для установки набора переменных среды. Я выполнил все эти команды, объединенные с &, как вы можете видеть ниже, чтобы системные переменные, которые устанавливает env.bat, все еще были доступны при запуске скрипта perl:
$cmdString = $destDrive + ": & call "+$lesDestDir+"data\env.bat & cd "+$rolloutDir+" & perl ..\JDH-rollout-2010.pl "+$rollout+" NC,r:\les"
write-host "cmdString: " $cmdString
Invoke-Command -session $session -ScriptBlock {cmd /v /k `"$args[0]`"} -args $cmdString
Команда вызова будет выглядеть так с подстановкой переменных:
Invoke-Command -session $session -scriptblock {cmd /k "D: & call D:\XXXX\env.bat & cd D:\XXXX\RO-00102 & perl ..\JDH-rollout-2010.pl RO-00102 NC,r:\les"}
Итак, вопрос в том, как я могу получить код возврата из сценария Perl (который является последней командой в строке команд, выполняемых в контексте cmd) обратно на локальный компьютер, где выполняется сценарий? Любые другие предложения относительно моего подхода приветствуются, поскольку у меня ограниченный опыт работы с powershell.