我正致力于为供应商应用自动化补丁。我想使用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-command完成后它们是否不再存在?我是否需要在单个invoke-command中将两个脚本调用串在一起,以便第二个脚本可以访问系统变量或类似的东西?
答案 0 :(得分:3)
使用SET
命令所做的更改 NOT 是永久性的,它们仅适用于当前的cmd
进程,并一直保留到cmd
进程终止。< / p>
如果可能,请使用powershell语法设置环境变量:
Invoke-Command -session $session {$env:myvar = 1}
或者,您可以使用cmd命令分隔符&
对命令进行字符串,如下所示:
Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
答案 1 :(得分:0)
是的,您需要将它们串在一起。环境变量在第一个退出的cmd会话中设置,然后在没有它们的情况下启动第二个。