PowerShell脚本添加System Variable后如何刷新使$env变量立即生效
解决方案
方案1:单变量即时生效(最简便)
你设置完系统级环境变量后,直接给当前PowerShell会话的对应环境变量手动赋值即可,不需要重启进程。修改后的参考代码如下:
$AddCheck = Start-Process powershell.exe -verb runAs -ArgumentList '-Command', "`"[System.Environment]::SetEnvironmentVariable('MyTools','C:\SomeFolder',[System.EnvironmentVariableTarget]::Machine)`";" -PassThru -Wait if($AddCheck.ExitCode -eq 0) { Write-Host "[+] Addition Successful." -foregroundcolor green # 直接给当前会话赋值,即时生效 $env:MyTools = 'C:\SomeFolder' Write-Host "[+] 变量 \$env:MyTools 已在当前会话生效,无需重启PowerShell" -foregroundcolor green } else { Write-Host "Something went wrong." -foregroundcolor red }
方案2:全量同步所有最新环境变量
如果需要同步所有近期修改的系统/用户级环境变量(比如同时更新了Path、其他自定义变量等),可以直接从注册表读取最新配置覆盖当前会话的环境变量列表:
# 先加载机器级所有环境变量 foreach ($key in [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine).Keys) { Set-Item -Path "env:\$key" -Value ([System.Environment]::GetEnvironmentVariable($key, [System.EnvironmentVariableTarget]::Machine)) -Force } # 再加载用户级所有环境变量(用户级优先级高于机器级,所以后执行覆盖) foreach ($key in [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User).Keys) { Set-Item -Path "env:\$key" -Value ([System.Environment]::GetEnvironmentVariable($key, [System.EnvironmentVariableTarget]::User)) -Force }
运行完成后当前会话的环境变量和新开的PowerShell进程完全一致,所有修改即时生效。
内容的提问来源于stack exchange,提问作者Origami
相关产品推荐
相关产品推荐

