运行通过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),这将无法工作。
我该如何解决这个问题?为什么脚本没有自己的位置堆栈?
答案 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 使用popd
和pushd
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脚本。取决于可能作为选项的场景。