保存 env: drive 并稍后恢复

Save off env: drive and later revert

我是 运行 来自 powershell 控制台的多个脚本。这些脚本 add/modify 变量在 env: 驱动器中。在 运行 每个脚本之间,我想将 env: 驱动器重置为打开控制台时的状态。有没有办法保存 off/copy env: 驱动器,然后在稍后将其复制回来?

最简单的方法是为每个脚本启动另一个进程。而不是

.\foo.ps1

只需使用

powershell -file .\foo.ps1

然后每个脚本都有自己的进程,因此也有自己的环境。当然,如果这些脚本还修改诸如全局变量之类的内容,您宁愿保留在两者之间,这也行不通。


另一方面,保存环境状态相当简单:

$savedState = Get-ChildItem Env:

并再次恢复它:

Remove-Item Env:*
$savedState | ForEach-Object { Set-Content Env:$($_.Name) $_.Value }

您可能想看看 PowerShell Community Extensions 模块。这些命令使管理环境变量更容易。特别是 Push-EnvironmentBlockPop-EnvironmentBlock 在这里很有用。 "Push" 保存当前环境变量并将其压入堆栈。 "Pop" 从堆栈中移除之前的状态并恢复它。所以你可能会这样做

Push-EnvironmentBlock -Description "Before running script.ps1"
.\script.ps1
Pop-EnvrionmentBlock