有没有办法在PowerShell中获取所有当前环境变量的副本?我想要做的是在特定时间点获取$env
的副本,运行执行大量set
命令的批处理脚本,然后再次查看$env
并检查发生了什么变化。然后我将确定新设置,更改或取消设置的环境变量,然后运行相应的setx
命令(或[Environment]::SetEnvironmentVariable($NAME, $value, 'User')
),以使进程中已更改的内容变为持久用户更改。
我尝试在.clone()
上调用$env
,但这不起作用。关于如何获得$env
的副本或关于如何完成上述描述的一般想法的任何想法?对powershell新手的建议将不胜感激。
答案 0 :(得分:2)
只需将Env:
驱动器检索到变量中即可。
$envVars = Get-ChildItem Env:
我写了一些可能对你有用的函数,在本文中:
Windows IT Pro: Take Charge of Environment Variables in PowerShell
我在文章中介绍了一些功能:Get-Environment
(与Get-ChildItem Env:
相同,但为了完整性而包括在内),Restore-Environment
(恢复已保存的环境副本)和{{1 (运行Invoke-CmdScript
shell脚本[批处理文件],添加环境变量并使它们在PowerShell中可用。)
答案 1 :(得分:1)
可能有更合适的方法,但这应该有效。
$a = @{}
Get-ChildItem env: | % { $a[$_.Name] = $_.Value }