Сохранить от env: диск и позже вернуться

Я запускаю несколько сценариев из консоли powershell. Эти сценарии добавляют / изменяют переменные в env: привод. Между выполнением каждого скрипта я хотел бы сбросить env: доехать до того что было когда я открыл консоль. Есть ли способ сохранить / скопировать env: диск, а затем скопировать его обратно на более поздний момент?

2 ответа

Решение

Самый простой способ - просто запустить другой процесс для каждого скрипта. Вместо

.\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-EnvironmentBlock а также Pop-EnvironmentBlock полезны здесь. "Push" сохраняет текущие переменные среды и помещает их в стек. "Pop" удаляет предыдущее состояние из стека и восстанавливает его. Так что вы, вероятно, сделали бы это

Push-EnvironmentBlock -Description "Before running script.ps1"
.\script.ps1
Pop-EnvrionmentBlock
Другие вопросы по тегам