如何为已编译 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,也需要引入它。
术语:我使用 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,也需要引入它。