【问题标题】:How to provide default value for a parameter in PowerShell help for compiled cmdlets如何为已编译 cmdlet 的 PowerShell 帮助中的参数提供默认值
【发布时间】:2016-01-30 01:10:36
【问题描述】:

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

使用脚本化的 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,您可以附加相同的属性(例如“强制”),但默认值在某种程度上是一种特殊情况。由于 PowerShell 参数通常使用 C# 中的自动实现属性完成,并且(在 C# 6.0 之前)C# 中的自动实现属性甚至不支持初始化程序,我怀疑可能无法填充该默认值槽。 (SwitchParameters 除外,它的默认值实际上是用“False”填写的,自然而然。)

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

【问题讨论】:

  • AFAIK,对于编译的 cmdlet,您应该使用 XML help file。您也可以尝试使用PSDefaultValueAttribute,但它适用于脚本化的 cmdlet,不确定它是否适用于已编译的 cmdlet。
  • 啊,我应该提到我使用XmlDoc2CmdletDoc 来生成@PetSerAl 提到的必要的XML 文件(.dll-Help.xml)。这个出色的实用程序让我们可以像使用标准 C# 文档一样使用标准代码内 doc-cmets——然后您就不需要任何外部文档帮助工具!所以...我只是尝试根据您的建议添加[PSDefaultValue(Help="abc")],但是,唉,它不适用于 C#。但是,既然我知道该属性,我可能会修补 XmlDoc2CmdletDoc 以使用它。

标签: c# powershell documentation-generation


【解决方案1】:

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

private int _quantity = 25;

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

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

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 2011-06-23
    • 1970-01-01
    • 2019-03-06
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多