在PowerShell中包含相关文件
我想用这样的伪句法来包含脚本文件:
Include '.\scripA.ps1'
但是我发现的唯一的东西是这样的:
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent . ($thisScript + '.\scriptA.ps1')
这是丑陋的。
有一些很好的方法来包含相对path的脚本?
不幸的是,没有好方法。 在V1中,PowerShell并没有真正支持这个想法。 真的,你正在采取的方法是最好的办法
你可以像这样使用$ PSScriptRoot参数:
. "$PSScriptRoot\script.ps1"
你可以点源(包括)文件:
。 \ scriptA.ps1
要获得脚本的完整path:
Resolve-Path。\ scriptA.ps1
如前所述,点源是最简单的select,虽然不是特别漂亮。 然而,这种格式使得它只是一点点清洁:
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path . (Join-Path $ScriptDirectory ScriptA.ps1)
另外,关于相对path的说明对于明确说明是有用的:原始post可能似乎意味着需要相对于当前工作目录的path; 在现实中,其意图是相对于当前脚本的源代码目录 (如alex2k8自己的代码示例所示)。 因此,这允许当前脚本从同一个存储库访问其他脚本。
从V2开始(本机从Win7 / 2008R2开始;请参阅$psversiontable.psversion
),您可以轻松地包含如下所示的文件:
. "RelativeOrAbsolutePathToFile\include.ps1" $result = FunctionInIncludeFile()
参考:
如何在脚本中重用Windows PowerShellfunction
这可能会从任何目录工作,但它会是一个sloooooowwwwwfind如果你的起始目录不是你想要包括的文件的直接前面的目录。 IOW,如果您的search起点是c:\或其他驱动器盘符的根目录,则可能会非常慢。
。 $(Resolve-Path -literal $(gci -Recurse include.ps1))
如果您正在开发PC上的脚本,但是需要将它们部署到将作为计划任务运行脚本的服务器上,这将会特别有效。