如何为自定义PowerShell Cmdlet的动态参数添加帮助信息?
要让动态参数出现在Cmdlet的帮助文档里,你需要做两件关键的事——先给动态参数加即时提示,再通过自定义帮助XML让Get-Help能识别并展示它。我给你一步步拆解:
1. 给动态参数添加即时帮助提示
当用户指定触发参数(比如-RecoveryState StandBy)后用-?查看帮助时,我们可以通过[Parameter]属性的HelpMessage参数添加提示。修改你的StandbyFilePathDynamicParameter类:
public class StandbyFilePathDynamicParameter { [Parameter(Mandatory = true, HelpMessage = "指定Standby模式恢复时使用的备用文件路径,必须是有效的文件路径。")] public string StandbyFilePath { get { return _standbyFilePath; } set { _standbyFilePath = value; } } private string _standbyFilePath; }
这样用户执行MyCmdLet -RecoveryState StandBy -?时,就能看到这个参数的帮助提示,但直接用Get-Help MyCmdLet还是看不到它——因为Get-Help默认不会自动扫描动态参数,得靠自定义帮助XML补全。
2. 创建自定义帮助XML文件
你需要写一个.ps1xml格式的帮助文件,明确告诉PowerShell这个动态参数的触发条件和详细说明。比如创建MyCmdLet.Help.ps1xml:
<?xml version="1.0" encoding="utf-8"?> <HelpItems xmlns="http://msh.microsoft.com/Help/2005/10"> <Command:Command xmlns:Command="http://msh.microsoft.com/Help/2005/10/Command"> <Command:Name>MyCmdLet</Command:Name> <Command:Syntax> <Command:SyntaxItem> <Command:ParameterGroup> <!-- 定义固定参数RecoveryState --> <Command:Parameter Required="true" Position="named"> <Command:Name>RecoveryState</Command:Name> <Command:ParameterValueRequired>true</Command:ParameterValueRequired> </Command:Parameter> <!-- 定义动态参数StandbyFilePath及触发条件 --> <Command:Parameter Required="true" Position="named"> <Command:Name>StandbyFilePath</Command:Name> <Command:ParameterValueRequired>true</Command:ParameterValueRequired> <Command:DynamicParameter> <Command:When> <Command:ParameterName>RecoveryState</Command:ParameterName> <Command:Operator>eq</Command:Operator> <Command:Value>StandBy</Command:Value> </Command:When> </Command:DynamicParameter> </Command:Parameter> </Command:ParameterGroup> </Command:SyntaxItem> </Command:Syntax> <Command:Parameters> <Command:Parameter> <Command:Name>RecoveryState</Command:Name> <Command:Description> <Command:Para>指定恢复操作的模式,可选值包括StandBy等。</Command:Para> </Command:Description> <Command:ParameterValueGroup> <Command:ParameterValue>StandBy</Command:ParameterValue> <!-- 可添加其他RecoveryState可选值 --> </Command:ParameterValueGroup> </Command:Parameter> <Command:Parameter> <Command:Name>StandbyFilePath</Command:Name> <Command:Description> <Command:Para>仅当RecoveryState设置为StandBy时可用,指定备用文件的完整路径,用于恢复操作的临时存储。</Command:Para> </Command:Description> <Command:DynamicParameter> <Command:When> <Command:ParameterName>RecoveryState</Command:Name> <Command:Operator>eq</Command:Operator> <Command:Value>StandBy</Command:Value> </Command:When> </Command:DynamicParameter> </Command:Parameter> </Command:Parameters> <Command:Description> <Command:Para>自定义恢复操作Cmdlet,支持多种恢复模式,其中StandBy模式需要指定备用文件路径。</Command:Para> </Command:Description> </Command:Command> </HelpItems>
3. 部署并加载帮助文件
把这个XML文件和你的Cmdlet模块一起部署:
- 如果是模块,在模块的
.psd1文件里,将XML路径添加到ModuleToProcess配置项中; - 测试时,执行
Import-Module YourModule -Force重新加载模块,或者用Update-Help -Module YourModuleName更新帮助缓存。
现在再执行Get-Help MyCmdLet -Full,就能看到StandbyFilePath参数的详细说明和触发条件;执行Get-Help MyCmdLet -Parameter StandbyFilePath也能直接定位到该参数的帮助信息。
内容的提问来源于stack exchange,提问作者isxaker
相关产品推荐
相关产品推荐

