【问题标题】:Want to understand why Powershell parameters are in some circumstances not functioning想了解为什么 Powershell 参数在某些情况下不起作用
【发布时间】:2021-05-31 09:44:26
【问题描述】:

我的目标是通过给定的过滤器列出所有可用的防火墙规则,并且对 Powershell 来说是全新的。

观察到一种奇怪的行为,这导致我询问是否有隐藏的东西我不知道。我可能会使用 Pipes 来完成同样的工作,但我有兴趣了解其中的原因。

Get-NetFirewallRule -DisplayGroup n*

按预期运行

Get-NetFirewallRule -DisplayName n*

按预期运行

但是当我添加/组合 -Enabled True 时,DisplayName 正在生成这样的错误消息,其中 DisplayGroup 正在生成结果。

无法使用指定的命名参数解析参数集。

  • Get-NetFirewallRule -DisplayName n* -Enabled True
Get-NetFirewallRule -Enabled True | ? DisplayName -like nsc*

工作中

Windows 10 机器上的 PS 版本“5.1.177”。

【问题讨论】:

  • 如果您查看the docs,您会看到几个不同的参数集; none 允许 both DisplayNameEnabled。至于为什么不,这将是 cmdlet 开发人员的问题; PowerShell 不强制执行此操作。顺便说一句,我建议颠倒逻辑——获取与名称匹配的规则,然后按启用状态过滤,因为前者可能比后者小和/或具有内置的本机过滤器,因此在大型设备上提供更好的性能规则集。
  • 明白了。谢谢你的澄清。在阅读有关 PS 的文档时,我会考虑有关参数集的信息。

标签: powershell windows-firewall-api


【解决方案1】:

这应该可行:

Get-NetFirewallRule | ? {($_.DisplayName -like "nsc*") -and ($_.Enabled -eq $true)}

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2021-11-20
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多