Гейзенберг был здесь: псевдонимы для параметров PowerShell появляются только в справке по командлетам, когда вы НЕ документируете командлет

Пытаясь сделать документацию для моих командлетов PowerShell (написанной на C#, а не в сценариях) как можно более полной, я сделал интересное открытие. Если я включаю правильный файл справки MAML (например, MyModule.dll-Help.xml), то отображение справки для параметра командлета, имеющего один или несколько псевдонимов, может выглядеть следующим образом:

PS> Get-Help Set-MySetting -param ItemType
-ItemType <ItemTypeChoice>
    The type for the item.    
    Required?                    false
    Position?                    4
    Default value                String
    Accept pipeline input?       true (ByPropertyName)
    Accept wildcard characters?  false

Если, с другой стороны, я удаляю этот файл справки и перезагружаю свой модуль, справка для того же параметра - теперь только отражается от самого кода Get-Help- может выглядеть так:

PS> Get-Help Set-MySetting -param ItemType
-ItemType <ItemTypeChoice>
    The type for the item.    
    Required?                    false
    Position?                    4
    Accept pipeline input?       true (ByPropertyName)
    Parameter set name           (All)
    Aliases                      Type, SettingType
    Dynamic?                     false

Обратите внимание на наличие Aliases собственность во второй инстанции и ее отсутствие в первой.

Конечно, сначала думают, что мой MAML должен быть неверным. Эта возможность еще более вероятна, учитывая тот факт, что благодаря обширному веб-поиску мне еще предстоит найти что-то удаленное, например, окончательный источник для XML-схемы MAML (!). Однако, если мой MAML неверен, то MAML также используется для собственных командлетов ядра PowerShell, потому что именно там я скопировал его, считая его надежным источником (C:\Windows\System32\WindowsPowerShell\v1.0\ EN-US\Microsoft.PowerShell.Commands.Management.dll-help.xml).

Но главное свидетельство проблемы заключается в том, что, хотя некоторые из основных командлетов PowerShell в этом файле имеют псевдонимы, они также не сообщают псевдонимы при вызове Get-Help! Вот пример:

PS> Get-Help Add-Computer -param DomainName
-DomainName <String>
    Specifies the domain to which the computers are added. This parameter is required when adding the computers to a domain.    
    Required?                    true
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

Вот начало определения MAML для DomainName параметр Add-Computer- отметить псевдонимы, определенные в конце:

<command:parameter required="true" variableLength="false"
    globbing="false" pipelineInput="false" position="1" aliases="DN,Domain">

Таким образом, Get-Help знает, как сообщать об псевдонимах, когда он должен выполнить работу самостоятельно, с помощью рефлексии, но он не в состоянии сообщить об псевдонимах, когда это предусмотрено в aliases атрибут <command:parameter>,

Вопрос

В чем истинная проблема?

  1. Get-Help ожидает, что псевдонимы будут где-то кромеaliases атрибут <command:parameter>,
  2. Get-Help не в состоянии искать псевдонимы в MAML вообще, когда предоставляется файл MAML.

Если (1) кто-то может определить правильный способ указания псевдонимов, то для моих собственных командлетов есть простой обходной путь. Если (2)... время, чтобы подать проблему на Connect!

1 ответ

У меня была та же проблема, и я смог обойти ее, добавив Aliases в параметр <maml:description> раздел.

Другие вопросы по тегам