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

本文关键字:cmdlet 参数 默认值 编译 PowerShell 帮助 | 更新日期: 2023-09-27 18:19:58

术语:我使用脚本化cmdlet表示在PowerShell中编写的cmdlet,使用compiled cmdletTR

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

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时,可以附加相同的属性(例如"强制"),但默认值在某种程度上是特殊情况。由于PowerShell参数通常是用C#中的自动实现属性完成的,并且(在C#6.0之前)C#中自动实现的属性甚至不支持初始值设定项,我怀疑可能无法填充默认值槽。(除了SwitchParameters,它的默认值确实填写了"False",这自然足够了。)

因此,对于已编译的cmdlet,是否有一种方法可以通过某种形式的C#代码插入来填充帮助输出中的默认值槽?目前我正在使用C#4.0,但如果4.0不可能,那么6.0可能吗?

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

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

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

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