3 回答
TA贡献2080条经验 获得超4个赞
感谢您发布这个非常有趣的问题,即使在2019年(事实上,更新shell cmd并不容易,因为它是如上所述的单个实例),因为在Windows中更新环境变量可以完成许多自动化任务而无需必须手动重启命令行。
例如,我们使用它来允许在我们定期重新安装的大量机器上部署和配置软件。我必须承认,在部署我们的软件期间不得不重新启动命令行是非常不切实际的,并且需要我们找到不一定令人愉快的解决方法。让我们来解决我们的问题。我们按如下方式进行。
1 - 我们有一个批处理脚本,它反过来调用这样的powershell脚本
[file:task.cmd]。
CMD > powershell.exe -executionpolicy unrestricted -File C:\path_here\refresh.ps1
2 - 此后,refresh.ps1脚本使用注册表项(GetValueNames()等)更新环境变量。然后,在相同的PowerShell脚本中,我们只需调用新的环境变量即可。例如,在典型的情况下,如果我们之前使用静默命令安装了nodeJS,则在调用该函数之后,我们可以直接调用npm在同一会话中安装如下的特定软件包。
[file:refresh.ps1]
function Update-Environment { $locations = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'HKCU:\Environment' $locations | ForEach-Object { $k = Get-Item $_ $k.GetValueNames() | ForEach-Object { $name = $_ $value = $k.GetValue($_) if ($userLocation -and $name -ieq 'PATH') { $env:Path += ";$value" } else { Set-Item -Path Env:\$name -Value $value } } $userLocation = $true }}Update-Environment#Here we can use newly added environment variables like for example npm install.. npm install -g create-react-app serve
powershell脚本结束后,cmd脚本继续执行其他任务。现在,要记住的一件事是,在任务完成后,cmd仍然无法访问新的环境变量,即使powershell脚本已在其自己的会话中更新了这些变量。这就是为什么我们在powershell脚本中执行所有需要的任务,当然可以调用与cmd相同的命令。
- 3 回答
- 0 关注
- 5199 浏览
添加回答
举报