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

如何获取当前会话中无参数的PowerShell Cmdlet?

获取PowerShell中无自定义参数的Cmdlet的正确方法

你之前的命令之所以返回大量实际带有参数的Cmdlet,核心原因是$_.Parameters包含了所有PowerShell Cmdlet默认继承的通用参数(如-Verbose、-ErrorAction等)和可选通用参数(如-Confirm、-WhatIf)——哪怕一个Cmdlet没有自己定义的参数,$_.Parameters.Count也不会为0。

要筛选出真正没有自定义参数(仅保留通用参数)的Cmdlet,需要先排除通用参数集,再检查剩余参数数量:

  1. 先定义通用参数的集合:
$commonParams = [System.Management.Automation.PSCmdlet]::CommonParameters + [System.Management.Automation.PSCmdlet]::OptionalCommonParameters
  1. 过滤并输出目标Cmdlet:
Get-Command -CommandType Cmdlet |
    Where-Object {
        # 筛选当前Cmdlet中不属于通用参数的自定义参数
        $customParams = $_.Parameters.Keys | Where-Object { $_ -notin $commonParams }
        # 判断自定义参数数量是否为0
        $customParams.Count -eq 0
    } |
    Select-Object Name, @{
        Name = 'CustomParameterCount'
        Expression = { ($_.Parameters.Keys | Where-Object { $_ -notin $commonParams }).Count }
    }

补充说明

  • 几乎所有PowerShell Cmdlet都继承了通用参数,因此不存在完全没有任何参数(包括通用参数)的Cmdlet。
  • 如果需要覆盖动态参数(部分Cmdlet的参数仅在特定上下文/模块加载时才显示)的场景,可以给Get-Command添加-All参数,确保获取所有可能的参数:
Get-Command -CommandType Cmdlet -All |
    Where-Object {
        $customParams = $_.Parameters.Keys | Where-Object { $_ -notin $commonParams }
        $customParams.Count -eq 0
    } |
    Select-Object Name, @{n='CustomParameterCount'; e={ ($_.Parameters.Keys | Where-Object { $_ -notin $commonParams }).Count }}

内容的提问来源于stack exchange,提问作者Peter M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:12:48