为什么PowerShell中Get-NetFirewallRule组合特定参数会报错?
PowerShell防火墙规则查询报错原理说明
你遇到的报错本质是PowerShell Cmdlet的参数集(Parameter Set)互斥限制,和防火墙本身的隐藏规则无关:
- PowerShell的Cmdlet允许开发者定义多组互斥的参数集合,用来限定不同查询场景下的合法参数组合,避免逻辑冲突。你可以执行
Get-Command Get-NetFirewallRule -Syntax查看所有官方定义的合法参数组合:-DisplayName参数属于独立的名称查询参数集,该参数集设计时没有开放-Enabled作为可搭配参数,两者同时传入时PowerShell无法匹配到任何一组合法参数集,因此抛出参数解析错误。-DisplayGroup参数所属的组查询参数集允许和-Enabled参数搭配使用,因此组合查询不会报错。
- 管道写法可以正常执行的原因是:
你拆分了两步操作,第一步用Get-NetFirewallRule -Enabled True先查询到所有已启用的防火墙规则,第二步用Where-Object(?是它的别名)在已经返回的结果集里做DisplayName的模糊匹配,这一步是PowerShell层面的内存过滤,不需要调用Cmdlet的参数校验逻辑,自然不会触发参数集错误。
内容的提问来源于stack exchange,提问作者Ali Avcı
相关产品推荐
相关产品推荐

