我正在努力为供应商应用程序自动化修补程序。我想使用PowerShell来迭代服务器列表,并在每个框中使用远程安装来安装。然而,一个方面让我头疼。我必须在执行安装脚本之前调用供应商提供的CMD脚本来设置系统变量。所以我称之为PowerShell这样的脚本:

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
.

我看到它在我的powershell窗口中回应它的工作时,但随后对安装脚本的调用,即:

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
.

立即退出说它使用的各种系统变量尚未设置。有人可以向我解释系统变量的范围吗?Invoke-命令完成后是否已停止存在?在单个Invoke-command中需要将两个脚本调用一起串起,以便第二个脚本可以访问系统变量或类似的内容?

有帮助吗?

解决方案

使用SET命令进行的更改是 not 永久性,它们仅适用于当前的世代天线码码进程,并保持在cmd过程终止之前。

如果可能使用powershell语法设置环境变量:

Invoke-Command -session $session {$env:myvar = 1}
. 或者,您可以使用如下所示的CMD命令分隔符生成的命令字符串:

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
.

其他提示

是的,您需要将它们串在一起。环境变量在排出的第一个CMD会话中设置,然后在没有它们的情况下启动第二个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top