如何在已编译的cmdlet的PowerShell帮助中为参数提供默认值

时间:2015-10-29 18:26:34

标签: c# powershell documentation-generation

术语:我使用脚本化cmdlet 表示用PowerShell编写的cmdlet和编译的cmdlet 表示用C#编写的cmdlet。

使用脚本化cmdlet - 从PowerShell V3开始 - 可以直接填写PowerShell帮助输出中的“默认值”插槽。例如,这个函数......

function Do-Stuff([parameter(Mandatory)][string]$Provider="abc") {...}

将允许此命令......

Get-Help Do-Stuff -parameter Provider

返回此输出...

-Provider <string>
    Required?                    true
    Position?                    1
    Default value                abc
    Accept pipeline input?       false
    Accept wildcard characters?  false

编写已编译的cmdlet可以附加相同的属性(例如“Mandatory”),但默认值有点特殊。由于PowerShell参数通常使用C#中的自动实现属性和(在C#6.0之前)C#中自动实现的属性甚至不支持初始化程序,我怀疑可能无法填写该默认值插槽。 (除了SwitchParameters,它实际上确实用“False”填充了默认值,自然就足够了。)

因此,对于已编译的cmdlet,有没有办法通过某种形式的C#代码检测来填写帮助输出中的默认值槽?目前我正在使用C#4.0,但如果不能使用4.0,则可以使用6.0吗?

1 个答案:

答案 0 :(得分:0)

我的问题的答案取决于用于生成文档的实用程序,当然。正如我在评论中提到的,我正在使用XmlDoc2CmdletDoc。经过进一步的实验(并查看源代码)后,我发现它确实支持默认值。所有人必须做的是通过支持字段为属性提供初始值,该值将作为默认值出现在生成的帮助中。示例:

private int _quantity = 25;

public int Quantity
{
    get { return _quantity; }
    set { _quantity = value; }
}

因此,即使不需要支持字段(如本例所示),如果要记录默认值25,也需要引入它。