我想包含具有这种伪语法的脚本文件:
Include '.\scripA.ps1'
但我发现的唯一的事情就是这样:
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent . ($thisScript + '.\scriptA.ps1')
那很难看.
是否有一些很好的方法来包含具有相对路径的脚本?
您可以使用$ PSScriptRoot参数,如下所示:
. "$PSScriptRoot\script.ps1"
你可以点源(包括)文件:
.\ scriptA.ps1
要获取脚本的完整路径:
Resolve-Path.\ scriptA.ps1
如前所述,Dot-sourcing是最简单的选择,尽管不是特别漂亮.但是,这种格式使它只是有点清洁:
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path . (Join-Path $ScriptDirectory ScriptA.ps1)
另外,关于相对路径的说明有助于显式:原始帖子似乎暗示需要相对于当前工作目录的路径; 实际上,目的是相对于当前脚本的源目录(如alex2k8自己的代码示例所示).因此,这允许当前脚本从同一存储库访问其他脚本.
不幸的是,没有好办法.PowerShell在V1中完全不支持这个想法.真的,你采取的方法是最好的方法
从V2开始(本机从Win7/2008R2开始;请参阅$psversiontable.psversion
),您可以轻松地包含如下文件:
. "RelativeOrAbsolutePathToFile\include.ps1" $result = FunctionInIncludeFile()
参考:
如何在脚本中重用windows powershell函数