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

How to provide default value for a parameter in PowerShell help for compiled cmdlets

术语:我使用 scripted cmdlet 表示用 PowerShell 编写的 cmdlet,compiled cmdlet 表示 cmdlet用 C# 编写。

使用脚本化的 cmdlet(从 PowerShell V3 开始)可以直接填写 PowerShell 帮助输出中的 "Default Value" 槽。例如这个函数...

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

将允许此命令...

Get-Help Do-Stuff -parameter Provider

到return这个输出...

-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,它的 Default Value 确实填写了 "False",很自然。)

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

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

private int _quantity = 25;

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

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