PowerShell Invoke-命令和系统变量
-
13-12-2019 - |
题
我正在努力为供应商应用程序自动化修补程序。我想使用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会话中设置,然后在没有它们的情况下启动第二个。
不隶属于 StackOverflow