Как квалифицировать команду с именем модуля, содержащим тире? - PullRequest
2 голосов
/ 11 мая 2019

В 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 Ответ

2 голосов
/ 11 мая 2019

Проблема не связана с наличием - ( HYPHEN-MINUS, U+002D) в имени модуля, о чем свидетельствует тот факт, что вызов posh-git\Write-GitStatus работает.

Вместо этого проблема в том, что модуль posh-git определен нестандартным способом:

Начиная с версий модуля 0.7.3, экспортируемая функция Write-VcsStatus определяется следующим образом:

function Global:Write-VcsStatus { # ...

То есть функция помещена в глобальную область действия , что означает, что технически не является частью модуля во время выполнения (несмотря на то, что она указана как экспортируемая функция и даже завершение табуляции, думая, что это обычная часть модуля).

Следовательно, вы можете вызвать его только без квалификатора модуля posh-git\, либо как Write-VcsStatus, либо, однозначно, как global:Write-VcsStatus.

Я не могу говорить , почему функция объявлена ​​таким образом - базовое GitHub repo не дает на первый взгляд никакой подсказки, но вы могли бы подумать о создании проблемы там.

...