我的个人资料中有以下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运行的条件。我将就此发表一个单独的问题。
当凯斯说第一个结构试图解决某些奇怪的问题时,凯斯几乎肯定是正确的。这是很久以前的复制粘贴事情。答案 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中描述的问题。