如何用包含破折号的模块名称来限定命令?

时间:2019-05-10 23:43:28

标签: powershell syntax module command

在PowerShell中,如何用包含破折号的模块名称来限定命令名(在调用中)?

具体来说,我正在尝试调用posh-git\Write-VcsStatus,但是解释器无法将其识别为模块限定的命令。我已经导入了posh-git模块;无论如何,我的$PSModuleAutoLoadingPreference默认设置为All;并且我已经验证我安装的posh-git版本包含命令Write-VcsStatus。这个问题与在我的相同环境中工作的其他示例形成对比,例如PowerLine\New-PromptText


作为参考,我的$PSVersionTable如下:

Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Microsoft Windows 10.0.17763 
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

1 个答案:

答案 0 :(得分:2)

该问题与模块名称中是否存在-HYPHEN-MINUS, U+002D)无关,这可以通过调用posh-git\Write-GitStatus的事实来证明。

相反,问题在于posh-git module是用非标准方式定义的:

从模块版本0.7.3开始,导出的函数Write-VcsStatus定义如下:

function Global:Write-VcsStatus { # ...

也就是说,该函数放置在全局范围中,这意味着它在技术上在运行时不是模块的一部分(尽管被列为导出的功能,甚至Tab补全功能也认为这是该模块的常规组成部分。

因此,您只能在没有模块限定符posh-git\的情况下 调用它,要么作为Write-VcsStatus,要么明确地作为global:Write-VcsStatus

我不能跟为什么这样声明函数-底层的GitHub repo乍一看不出任何线索,但是您可以考虑在此处创建问题。