You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:56:06