我正在为供应商应用程序编写部署脚本。它读取映射各种环境的部署路径的 xml,然后遍历各种服务器并复制正确的文件并执行推出脚本。如果推出脚本失败,我希望脚本退出。rollout 脚本是一个 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 经验有限,因此欢迎对我的方法提出任何其他建议。