2015-09-04 82 views
0

有没有办法在PowerShell中获取所有当前环境变量的副本?我想要做的就是在时间上的特定点得到的$env副本,运行批处理脚本,做了一堆set命令,然后看$env再次检查了什么变化。然后我会确定哪些环境变量已经重新设定,更改或取消,然后运行适当的setx命令(或[Environment]::SetEnvironmentVariable($NAME, $value, 'User')),以使已经在进程改为永久用户变化的东西。Powershell检查什么环境变量已经改变

我已经试过在$env上拨打.clone(),但没有奏效。关于如何获得$env副本的任何想法或关于如何完成上述描述的一般想法?对于PowerShell新手的建议将不胜感激。

+0

使用'env:'驱动器中的项目? –

+0

你如何ENV的'副本:'? – JoshAdel

回答

2

只需将Env:驱动器检索到变量中。

$envVars = Get-ChildItem Env: 

我写了一些功能,这可能是对你有用的为好,在这篇文章中:

Windows IT Pro: Take Charge of Environment Variables in PowerShell

我在文章中提出了一些功能:Get-Environment(同为Get-ChildItem Env:,但包括为了完整),Restore-Environment(恢复环境的保存的副本),并Invoke-CmdScript(运行cmd.exe shell脚本[批处理文件],增加了环境变量,并使其在PowerShell中可用)。

1

可能有更合适的方法来做到这一点,但这应该工作。

$a = @{} 
Get-ChildItem env: | % { $a[$_.Name] = $_.Value }