Сохранить от 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