PowerShell 如何调用同级目录中的脚本?
数据小陈
结论
可以。.. 表示上一级目录,因此可以从当前目录访问上一级目录中的 siblingfolder:
.\..\siblingfolder\mysuperscript.ps1 -param1 bla -param2 blabla -param3 blob
不过,这个相对路径是相对于 PowerShell 的当前工作目录解析的,不一定相对于正在运行的脚本所在目录。如果脚本从其他目录启动,可能会找不到目标文件。
根据当前工作目录调用
如果运行脚本时,当前工作目录就是调用脚本所在的目录,可以直接使用题目中的写法:
.\..\siblingfolder\mysuperscript.ps1 -param1 bla -param2 blabla -param3 blob
其中,. 表示当前工作目录,.. 表示它的父目录。
根据当前脚本的位置调用
如果要让路径始终相对于当前脚本的位置构造,可以使用 $PSScriptRoot。它表示当前脚本所在的目录:
$target = Join-Path (Split-Path $PSScriptRoot -Parent) 'siblingfolder\mysuperscript.ps1'
& $target -param1 bla -param2 blabla -param3 blob
Split-Path $PSScriptRoot -Parent 会取得当前脚本目录的父目录,Join-Path 则拼接出目标脚本的路径。调用运算符 & 用于执行变量中保存的脚本路径。
注意事项
题目中的写法能否成功,取决于启动脚本时的当前工作目录。如果脚本需要从不同目录启动,使用 $PSScriptRoot 构造路径通常更可靠。以上示例按普通脚本调用处理;若要把目标脚本加载到当前作用域,还需要使用点源语法,例如 . $target。这种方式与直接运行脚本的行为不同。
备注:内容仅供参考。
