【发布时间】: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