在PowerShell中包含相关文件

问题描述 投票:0回答:7

我想包含具有此类伪语法的脚本文件:

Include '.\scripA.ps1'

但我唯一发现的是这样的东西:

$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')

那太丑了。

是否有一些nice的方法来包含具有相对路径的脚本?

powershell include relative-path
7个回答
131
投票

如果文件与当前脚本位于同一目录中。您可以像这样使用 $PSScriptRoot 参数:

. "$PSScriptRoot\script.ps1"

30
投票

您可以点源(包含)文件:

。 .\scriptA.ps1

获取脚本的完整路径:

解析路径.\scriptA.ps1


21
投票

如前所述,点采购是最简单的选择,尽管不是特别漂亮。然而,这种格式让它变得更干净一点:

$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)

此外,关于“相对路径”的注释对于明确说明很有用:原始帖子可能似乎暗示需要相对于“当前工作目录”的路径;实际上,其目的是相对于“当前脚本的源目录”(如 alex2k8 自己的代码示例所示)。因此,这允许当前脚本访问同一存储库中的其他脚本。 不幸的是没有,没有什么好办法。 PowerShell 在 V1 中并没有很好地支持这个想法。 事实上,您正在采取的方法是最好的方法


8
投票
$psversiontable.psversion

),您可以轻松包含这样的文件:


6
投票

参考:

如何在脚本中重用windows powershell函数

    


您可以使用 $PSScriptRoot 和“Split-Path”指令使其能够干净地用于相对路径。 . (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')


2
投票

这可能适用于任何目录,但如果您的起始目录不是您要包含的文件的直接先前目录,那么这将是一个 slooooooowwwwwww 查找。 IOW,如果您的搜索起点是 c:\ 或其他驱动器盘符的根目录,那么这可能会非常慢。


。 $(Resolve-Path -literal $(gci -Recurse include.ps1))


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.