当前位置:  开发笔记 > 编程语言 > 正文

在PowerShell中包含相关文件

如何解决《在PowerShell中包含相关文件》经验,为你挑选了5个好方法。

我想包含具有这种伪语法的脚本文件:

Include '.\scripA.ps1'

但我发现的唯一的事情就是这样:

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

那很难看.

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



1> chrischu..:

您可以使用$ PSScriptRoot参数,如下所示:

. "$PSScriptRoot\script.ps1"


这是唯一有效的答案

2> Shay Levy..:

你可以点源(包括)文件:

.\ scriptA.ps1

要获取脚本的完整路径:

Resolve-Path.\ scriptA.ps1



3> Michael Sore..:

如前所述,Dot-sourcing是最简单的选择,尽管不是特别漂亮.但是,这种格式使它只是有点清洁:

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

另外,关于相对路径的说明有助于显式:原始帖子似乎暗示需要相对于当前工作目录的路径; 实际上,目的是相对于当前脚本的源目录(如alex2k8自己的代码示例所示).因此,这允许当前脚本从同一存储库访问其他脚本.



4> JaredPar..:

不幸的是,没有好办法.PowerShell在V1中完全不支持这个想法.真的,你采取的方法是最好的方法


在PowerShell 3.0中,您可以使用`.(Join-Path $ PSScriptRoot settings.ps1)`(以点开头的命令).

5> Ralph Willgo..:

从V2开始(本机从Win7/2008R2开始;请参阅$psversiontable.psversion),您可以轻松地包含如下文件:

. "RelativeOrAbsolutePathToFile\include.ps1"

$result = FunctionInIncludeFile()

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


据我所知,这个问题是点源线是相对于当前工作目录而不是相对于包含点源线的脚本进行评估的.因此,如果您首先对包含该脚本的目录执行"cd",那么如果您从另一个目录调用它,则不会.
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有