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

标签 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

最佳答案

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

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

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

function Global:Write-VcsStatus { # ...

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

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

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

关于powershell - 如何使用包含破折号的模块名称来限定命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56086056/

相关文章:

电源外壳; foreach 对象;如何再次创建正确的输出到管道

powershell - 为什么没有预构建的 PInvoke DLL?

Python:需要超过 1 个值才能解包

c++ - 专用于 "direct"函数类型(与函数指针类型相反)

c - 驱动函数中的静态全局变量和静态局部变量

Python 将函数从另一个目录导入到文件,该文件又从自己的目录导入另一个函数

Python Turtle 图形窗口仅短暂打开然后关闭

azure - 如何使用PowerShell创建客户端 key ?

powershell - 使用PowerShell运行我的第三方DLL文件

MySQL触发器用户声明变量