这个PowerShell代码片段是什么意思(语法解析帮助​​!)

时间:2010-11-19 16:24:49

标签: powershell

我的个人资料中有以下PowerShell脚本片段:

. (join-path (split-path (& { $myInvocation.ScriptName })) "export-errors.ps1")

现在,我知道这会导致与我的配置文件脚本存在于同一目录中的脚本export-errors.ps1被执行。我的问题是,为什么?

我不明白为什么& { xxx }构造在这种情况下仅与xxx不同。我试图使用这个类似的结构:

$lame = join-path (split-path $myinvocation.mycommand.definition) "_lame\lame.exe"

然而,这不起作用。我收到有关提供商不存在的错误,我不明白为什么。

为什么第一个构造工作,第二个构造不工作?

更新

我很清楚我正在追逐错误的错误。实际上,在某些条件下,这两种结构都有效。然而,我运行第二个结构的条件是NEITHER运行的条件。我将就此发表一个单独的问题。

当凯斯说第一个结构试图解决某些奇怪的问题时,凯斯几乎肯定是正确的。这是很久以前的复制粘贴事情。

1 个答案:

答案 0 :(得分:2)

对于您的个人资料中的点源,该语法可能是最重要的。在profile.ps1脚本的上下文中,以下内容应该足够了:

. (join-path (split-path $MyInvocation.MyCommand.Path) export-errors.ps1)

当然,如果你要点源多个文件,你可能想要走这条路:

$ScriptPath = $MyInvocation.MyCommand.Path
$ScriptDir = Split-Path $ScriptPath -Parent
. $ScriptDir\lib.ps1

我相信您原来的方法会尝试解决我在this blog post中描述的问题。