如何使用相对路径调用另一个PowerShell脚本?

时间:2011-09-11 11:47:52

标签: powershell relative-path

我有以下目录树:

e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1

现在我想调用一个名为“按任意键继续.ps1”的脚本,它位于“utils”文件夹中,来自我在“services”文件夹中的脚本。我怎么做?我无法弄清楚相对路径。

我试着这样做:

"$ '.\..\utils\Press any key to continue.ps1'"

但它不起作用。

4 个答案:

答案 0 :(得分:31)

根据您的操作,以下内容应该有效:

& "..\utils\Press any key to continue.ps1"

. "..\utils\Press any key to continue.ps1"

(查找使用&.之间的区别并决定使用哪一个

这就是我处理这种情况的方式(和@Shay提到的略有不同):

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$utilsDir  = Join-Path -Path $scriptDir -ChildPath ..\utils

& "$utilsDir\Press any key to continue.ps1"

答案 1 :(得分:8)

将以下函数放入调用脚本中以获取其目录路径并将utils路径与脚本名称一起加入:

# create this function in the calling script
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }

# generate the path to the script in the utils directory:
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1'

# execute the script
& $script 

答案 2 :(得分:1)

要获取当前脚本路径,可以使用 $PSScriptRoot 变量。例如 以下是结构: 解决方案\mainscript.ps1 解决方案\secondscriptfolder\secondscript.ps1

#mainscript.ps1

$Second = Join-Path $PSScriptRoot '\secondscriptfolder\secondscript.ps1'

$Second

答案 3 :(得分:0)

非常感谢你的信息。 我有类似的问题,我可以这样工作,从父文件夹调用其他脚本。

$CommandPath = (Get-Location).Path | Split-Path -Parent; $script = "$CommandPath\Logins\Login_SSI_SST_exch2010_DKSUND_Exchange365.ps1"; & $script