假设您在C#中编写了一些PSCmdLet:
/// <summary>
/// Get a stack overflow exception.
/// </summary>
[Cmdlet(VerbsCommon.Join, "StackOverflow")]
[OutputType(typeof(OverflowException))]
public class JoinStackOverflow : PSCmdlet {
protected override void ProcessRecord() {
throw new OverflowException("stack");
}
}
如果将定义上述模块的模块加载到PowerShell中,则命令help Join-StackOverflow
将返回以下内容:
NAME
Join-StackOverflow
SYNTAX
Join-StackOverflow [<CommonParameters>]
ALIASES
None
REMARKS
None
如何为此cmdlet添加概要/摘要,例如与Get-Process
相同:
NAME
Get-Process
SYNOPSIS
Gets the processes that are running on the local computer or a remote computer.
...
答案 0 :(得分:5)
Cmdlet帮助通常位于卫星XML文件中。假设cmdlet位于模块 MyModule.dll 中,帮助文件通常位于 MyModule \ en-US \ MyModule.dll-help.xml
中帮助XML就是所谓的MAML格式。为了避免每次手动编写它我创建了一个工具(脚本库)Helps。它为cmdlet生成模板帮助脚本,该脚本看起来与帮助类似。这是一个example。然后,在填充空白(example)之后,调用另一个Helps命令将此脚本转换为MAML XML。
P.S。网上还有其他帮助工具。我尝试了其中几个并决定创建自己的。
答案 1 :(得分:1)
以下是MyModule.dll-Help.xml文件的基本结构,该文件可以与模块DLL本身位于同一目录中,也可以位于culture子目录(例如en-US)中:
<!-- For a complete treatment of this format for PowerShell cmdlets,
see https://msdn.microsoft.com/en-us/library/bb525433.aspx -->
<command:command
xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
<command:name>Verb-Noun</command:name>
<command:verb></command:verb>
<command:noun></command:noun>
<maml:description><maml:para>Synopsis</maml:para></maml:description>
</command:details>
<maml:description><maml:para>Description</maml:para></maml:description>
<command:syntax>
<command:syntaxItem>
<maml:name>Verb-Noun</maml:name>
<command:parameter required="true" globbing="true" pipelineInput="true (ByValue)" position="1">
<maml:name>ParameterName1</maml:name>
<command:parameterValue required="true">string[]</command:parameterValue>
</command:parameter>
<command:parameter required="true" globbing="true" pipelineInput="true (ByPropertyName)">
<maml:name>ParameterName2</maml:name>
<command:parameterValue required="true">int32[]</command:parameterValue>
</command:parameter>
<!-- Additional parameter elements for each additional parameter. -->
</command:syntaxItem>
<!-- Additional syntaxItem elements for each additional parameter set. -->
</command:syntax>
<command:parameters>
<command:parameter required="true" globbing="true" pipelineInput="true (ByValue)" position="1">
<maml:name>ParameterName1</maml:name>
<command:parameterValue required="true">string[]</command:parameterValue>
<maml:description><maml:para>Parameter description</maml:para></maml:description>
<dev:type>string[]</dev:type>
<dev:defaultvalue>defaultvalue</dev:defaultvalue>
<dev:possiblevalues>
<dev:possiblevalue>
<dev:value>value1</dev:value>
<maml:description><maml:para>value description</maml:para></maml:description>
</dev:possiblevalue>
<dev:possiblevalue>
<dev:value>value2</dev:value>
<maml:description><maml:para>value description</maml:para></maml:description>
</dev:possiblevalue>
</dev:possiblevalues>
</command:parameter>
<command:parameter required="true" globbing="true" pipelineInput="true (ByPropertyName)">
<maml:name>ParameterName2</maml:name>
<maml:description><maml:para>Parameter description</maml:para></maml:description>
<dev:type>int32[]</dev:type>
<dev:defaultvalue>defaultvalue</dev:defaultvalue>
</command:parameter>
<!-- Additional parameter elements for each additional parameter. -->
</command:parameters>
<command:inputTypes>
<command:inputType>
<dev:type>
<maml:name>System.String</maml:name>
<maml:uri></maml:uri>
<maml:description><maml:para></maml:para></maml:description>
</dev:type>
<maml:description><maml:para>You can pipe names …</maml:para></maml:description>
</command:inputType>
<!-- Additional inputType elements for each additional input type. -->
</command:inputTypes>
<command:returnValues>
<command:returnValue>
<dev:type>
<maml:name>System.Object</maml:name>
<maml:uri></maml:uri>
<maml:description><maml:para></maml:para></maml:description>
</dev:type>
<maml:description><maml:para>When you …</maml:para></maml:description>
</command:returnValue>
</command:returnValues>
<maml:alertSet>
<maml:title>Note Title</maml:title>
<maml:alert>
<maml:para></maml:para>
</maml:alert>
</maml:alertSet>
<command:examples>
<command:example>
<maml:title>---------- EXAMPLE 1 ----------</maml:title>
<!-- The documentation (and SQLPS) suggests the PS C:\> should go in the intro,
but the dll-Help.xml files that come with PowerShell all seem to add it to the dev:code line. -->
<maml:Introduction><maml:para>PS C:\></maml:para></maml:Introduction>
<dev:code>Verb-Noun</dev:code>
<dev:remarks>
<maml:para> command description </maml:para>
<!-- Two empty para elements signify the beginning of the output. -->
<maml:para/>
<maml:para/>
<maml:para>output</maml:para>
</dev:remarks>
</command:example>
</command:examples>
<maml:relatedLinks>
<maml:navigationLink><maml:linkText>Topic-name</maml:linkText><maml:uri></maml:uri></maml:navigationLink>
<maml:navigationLink><maml:linkText>Topic-name</maml:linkText><maml:uri></maml:uri></maml:navigationLink>
</maml:relatedLinks>
</command:command>