Добавление справки на основе комментариев прерывает Get-Help для динамических параметров

Если у меня есть функция с динамическими параметрами, как я могу добавить справку на основе комментариев, чтобы при запуске пользователя Get-Help он все равно покажет динамические параметры?
Например, вот моя функция без помощи комментариев

function Test-DynamicParam{
  [CmdletBinding(PositionalBinding=$false)]
  param(
      [Parameter(Mandatory=$false)][string]$NamedStaticParam1,
      [Parameter(Mandatory=$false)][string]$NamedStaticParam2
  )
  dynamicparam {
      $paramDictionary = new-object -Type System.Management.Automation.RuntimeDefinedParameterDictionary

      $paramname = "NamedDynamicParam1"
      $values = 'foo','bar' #would normally get these dynamically
      $attributes = new-object System.Management.Automation.ParameterAttribute
      $attributes.ParameterSetName = "__AllParameterSets"
      $attributes.Mandatory = $true
      $attributeCollection = new-object -Type System.Collections.ObjectModel.Collection[System.Attribute]
      $attributeCollection.Add($attributes)
      $ValidateSet = new-object System.Management.Automation.ValidateSetAttribute($values)
      $attributeCollection.Add($ValidateSet)
      $dynParam = new-object -Type System.Management.Automation.RuntimeDefinedParameter($paramname, [string], $attributeCollection)

      $paramDictionary.Add($paramname, $dynParam)
      return $paramDictionary
  }

  process{
     $PSBoundParameters.NamedDynamicParam1
     $PSBoundParameters.NamedStaticParam1
     $PSBoundParameters.NamedStaticParam2
  }  
}  

если я бегу Get-Help Test-DynamicParam -Full это дает мне

NAME
    Test-DynamicParam
SYNTAX
    Test-DynamicParam -NamedDynamicParam1 {foo | bar} [-NamedStaticParam1 <string>] [-NamedStaticParam2 <string>]  [<CommonParameters>]
PARAMETERS
    -NamedDynamicParam1 <string>

        Required?                    true
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     true

    -NamedStaticParam1 <string>

        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

    -NamedStaticParam2 <string>

        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see 
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
INPUTS
    None
OUTPUTS
    System.Object
ALIASES
    None
REMARKS
    None  

но если я добавлю справку на основе комментариев, как это:

function Test-DynamicParam{
    <#
    .SYNOPSIS
        A test for the dynamic parameter list populating
    .DESCRIPTION
        Using this for Stack Overflow
    .NOTES
        Adding comment-based help breaks the parameter and syntax help
    #>
    ...  

Бег Get-Help Test-DynamicParam -Full показывает только статические параметры как в разделе SYNTAX, так и в разделе PARAMETERS:

NAME
    Test-DynamicParam

SYNOPSIS
    A test for the dynamic parameter list populating


SYNTAX
    Test-DynamicParam [-NamedStaticParam1 <String>] [-NamedStaticParam2 <String>] [<CommonParameters>]


DESCRIPTION
    Using this for Stack Overflow


PARAMETERS
    -NamedStaticParam1 <String>

        Required?                    false
        Position?                    named
        Default value                
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -NamedStaticParam2 <String>

        Required?                    false
        Position?                    named
        Default value                
        Accept pipeline input?       false
        Accept wildcard characters?  false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see 
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). 

INPUTS

OUTPUTS

NOTES


        Adding comment-based help breaks the parameter and syntax help


RELATED LINKS

Я также попытался добавить .PARAMETER NamedDynamicParam1 к справке на основе комментариев, но с тем же результатом. Интересно, что это не влияет на использование функции, просто Get-Help часть. Я думаю, что это ошибка, так как не имеет никакого смысла, что добавление справки будет функционально удалять справку

1 ответ

Решение

Итак, я отправил сообщение в Бундер Джун в Твиттере, указывая ей на этот вопрос, и она ответила.

Неудивительно, что у нее уже есть целая статья, написанная об этом!

Короткий ответ: это сломано.

Ее обходной путь - просто добавить официальную справочную запись для параметра (ов) в .DESCRIPTION раздел:

Чтобы описать это, я добавляю раздел "ДИНАМИЧЕСКИЕ ПАРАМЕТРЫ" с записью для RequiredVersion, в конец раздела.DESCRIPTION справки на основе комментариев или <maml:description> раздел справки XML.

На данный момент команда PowerShell должна выяснить, как это исправить в будущем.

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