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

Posted

技术标签:

【中文标题】如何使用包含破折号的模块名称来限定命令?【英文标题】:How to qualify a command with a module name containing a dash? 【发布时间】:2019-09-28 20:41:33 【问题描述】:

在 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】:

该问题与模块名称中存在- (HYPHEN-MINUS, U+002D) 无关,调用posh-git\Write-GitStatus 有效这一事实证明了这一点。

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

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

function Global:Write-VcsStatus  # ...

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

因此,您只能在没有模块限定符posh-git\ 的情况下调用它,可以是Write-VcsStatus,也可以是global:Write-VcsStatus

我无法说明为什么函数会以这种方式声明 - 底层的 GitHub repo 乍一看并没有提供任何线索,但您可以考虑在那里创建一个问题。

【讨论】:

以上是关于如何使用包含破折号的模块名称来限定命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 LaTeX 连字符包含破折号的单词?

如何在 Kohana 中的控制器名称之间添加破折号?

是否可以在 Access 查询中使用其模块名称来限定 VBA 函数调用?

mssql查询命令

如何在ColdFusion中访问包含特殊字符的变量名称

如何规范地解析模块名称