2013-05-17 2 views
1

У меня есть PS сценарии, что изменения текущего каталога:PowerShell ребенок скрипт изменяет окружение родителя

Set-Location (Join-Path (Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Definition)) -ChildPath src) 

К сожалению, это влияет окружение родительского процесса. Поэтому, когда я вызываю этот скрипт из терминала, текущий каталог будет изменен после вызова сценария. В сценарии среды Unix можно изменить только локальный текущий каталог, а также переменные среды для скрипта, а не для родительской оболочки.

Как можно изменить это поведение?

+4

Одним из вариантов было бы использовать Push-Location вместо Set-Location. Затем просто вызовите Pop-Location в конце скрипта. – EBGreen

ответ

1
# Create a drive t: in the local scope whose root is c:\temp\backup 
# drive t: disappears when the scope (function in this case) is exited 
function test { 
    New-PSDrive -name "t" -scope local -root c:\temp\backup -PSProvider filesystem; 
    ls t: 
} 
ls t: # fails unless t: already exists 
test # succeeds 
ls t: # fails 
Смежные вопросы