In 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发布于 2019-05-11 13:54:59
这个问题与模块名称中存在的- (U+002D)无关,调用posh-git\Write-GitStatus的工作就证明了这一点。
相反,问题是模块是以一种非标准的方式定义的:
从模块版本0.7.3开始,导出函数Write-VcsStatus的定义如下:
function Global:Write-VcsStatus { # ...也就是说,函数放在全局范围内,这意味着在运行时它在技术上不是模块的一部分(尽管它被列为导出的函数,甚至还以为它是模块的一个常规部分)。
因此,您只能在没有模块限定符posh-git\的情况下调用它,既可以作为Write-VcsStatus调用,也可以作为global:Write-VcsStatus调用。
我无法解释为什么函数是这样声明的--底层的GitHub回购乍一看没有提供任何线索,但是您可以考虑在那里创建一个问题。
https://stackoverflow.com/questions/56086056
复制相似问题