2012-07-01 3 views
2

Я пытаюсь найти способ, с помощью которого сценарий PowerShell может быть выполнен без среды «« Проникает »« назад и вперед »между скриптом и другими скриптами/консолью.Создать/уничтожить новую среду в скрипте PowerShell

I.e. если я устанавливаю переменную среды перед вызовом сценария, я не хочу, чтобы скрипт видел эту переменную среды, и если я установил переменную среды в скрипте, я не хочу видеть ее с консоли после этого.

Я строй PowerShell сборки/компиляцию сценария, который вызывает vcvarsall.bat (чтобы получить все Visual C++ 2010 переменных и т.д. в окружающую среду), но я не хочу окружающую среды, которая vcvarsall.bat создает «« утечка »« назад на консоль - я хочу начинать свежий каждый раз, не закрывая/не открывая окно PowerShell.

ответ

2

Вы можете вызвать скрипт с помощью:

powershell.exe -file <PS1 File> 

Текущие переменные не будут доступны в сценарии PS1 и переменные, созданные в сценарии PS1 не будет доступен после его выхода.

+0

Чтобы быть понятным, когда вы запускаете один процесс из другого, новый процесс наследует среду своего родителя в момент его создания. Это означает, что переменные среды, созданные в консоли *, будут отображаться * в среде сценария, хотя любые изменения среды в скрипте не будут распространяться обратно в родительский (сравните вывод вызовов 'dir' в примере:' $ env : v1, $ env: v2 = 'alpha', 'beta'; dir env: v *; powershell {$ env: v2, $ env: v3 = 'beta2', 'gamma'; dir env: v *}; dir ENV: v * '). –

Смежные вопросы