我想包含具有此类伪语法的脚本文件:
Include '.\scripA.ps1'
但我唯一发现的是这样的东西:
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')
那太丑了。
是否有一些nice的方法来包含具有相对路径的脚本?
如果文件与当前脚本位于同一目录中。您可以像这样使用 $PSScriptRoot 参数:
. "$PSScriptRoot\script.ps1"
您可以点源(包含)文件:
。 .\scriptA.ps1
获取脚本的完整路径:
解析路径.\scriptA.ps1
如前所述,点采购是最简单的选择,尽管不是特别漂亮。然而,这种格式让它变得更干净一点:
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)
此外,关于“相对路径”的注释对于明确说明很有用:原始帖子可能似乎暗示需要相对于“当前工作目录”的路径;实际上,其目的是相对于“当前脚本的源目录”(如 alex2k8 自己的代码示例所示)。因此,这允许当前脚本访问同一存储库中的其他脚本。 不幸的是没有,没有什么好办法。 PowerShell 在 V1 中并没有很好地支持这个想法。 事实上,您正在采取的方法是最好的方法
$psversiontable.psversion
),您可以轻松包含这样的文件:
参考:
如何在脚本中重用windows powershell函数
您可以使用 $PSScriptRoot 和“Split-Path”指令使其能够干净地用于相对路径。
. (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')
这可能适用于任何目录,但如果您的起始目录不是您要包含的文件的直接先前目录,那么这将是一个 slooooooowwwwwww 查找。 IOW,如果您的搜索起点是 c:\ 或其他驱动器盘符的根目录,那么这可能会非常慢。
。 $(Resolve-Path -literal $(gci -Recurse include.ps1))