Добавление справки на основе комментариев прерывает 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 должна выяснить, как это исправить в будущем.