Powershell脚本更改父PowerShell的目录

时间:2014-12-17 15:58:16

标签: powershell

运行通过cd(或set-location / push-location / etc。)更改目录的powershell脚本时,运行脚本的控制台也会在该目录中运行

实施例: script.ps1

cd c:\tmp
# do stuff

如果我从c:\users\me运行此操作,我最终会进入c:\tmp

PS C:\users\me> .\script.ps1
PS C:\tmp> |

现在我知道我可以使用push-location,然后再使用pop-location。但是,如果脚本停在中间某处(通过Exit),这将无法工作。

我该如何解决这个问题?为什么脚本没有自己的位置堆栈?

1 个答案:

答案 0 :(得分:1)

您可以随时使用Try/Catch/Finally。将当前目录路径设置为变量,然后在cd c:\tmp之前设置Try,并将目录更改为Finally中的变量?

示例1

$path = (Get-Item -Path ".\" -Verbose).FullName
cd c:\temp
Try
{
    #Do stuff
    #exit is fine to use
    #this will output the directory it is in, just to show you it works
    Write-Host (Get-Item -Path ".\" -Verbose).FullName
}
Catch [system.exception]
{
    #error logging
}
Finally
{
    cd $path
}

示例2 使用popdpushd

pushd c:\temp
Try
{
    #Do stuff
    #exit is fine to use
    #this will output the directory it is in, just to show you it works
    Write-Host (Get-Item -Path ".\" -Verbose).FullName
}
Catch [system.exception]
{
    #error logging
}
Finally
{
    popd
}

我还建议查看arco444建议的内容,即通过-File参数调用powershell脚本。取决于可能作为选项的场景。