0

我正在从 powershell 控制台运行多个脚本。这些脚本在env:驱动器中添加/修改变量。在运行每个脚本之间,我想将env:驱动器重置为我打开控制台时的状态。有没有办法保存/复制env:驱动器,然后再将其复制回来?

4

2 回答 2

1

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

.\foo.ps1

只需使用

powershell -file .\foo.ps1

然后每个脚本都有自己的进程,因此有自己的环境来搞乱。当然,如果这些脚本还修改了您希望保留在两者之间的全局变量之类的东西,这当然是行不通的。


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

$savedState = Get-ChildItem Env:

并再次恢复它:

Remove-Item Env:*
$savedState | ForEach-Object { Set-Content Env:$($_.Name) $_.Value }
于 2015-10-22T14:27:24.850 回答
1

您可能想查看PowerShell 社区扩展模块。这些命令使管理环境变量更容易。特别是,Push-EnvironmentBlockPop-EnvironmentBlock这里很有用。“推送”保存当前环境变量并将其推送到堆栈上。“Pop”从堆栈中删除先前的状态并恢复它。所以你可能会这样做

Push-EnvironmentBlock -Description "Before running script.ps1"
.\script.ps1
Pop-EnvrionmentBlock
于 2015-10-22T17:10:30.490 回答