为什么 PowerShell 中的防火墙规则枚举速度很慢?

问题描述 投票:0回答:1

我想枚举我的 Windows 防火墙规则,但运行需要一段时间...

Measure-Command {

  $FirewallRules = Get-NetFirewallRule |
    where {
      $_.Enabled -eq $true -and
      $_.Direction -eq 'Inbound'
    } | Get-NetFirewallPortFilter

}

TotalSeconds      : 6,3937642

没有获取实际的端口过滤器(

Get-NetFirewallPortFilter
),枚举只是

TotalSeconds      : 0,3220308

有没有更快的方法来完成这个?

编辑:如果有任何替代代码适用于普通用户帐户,我会更喜欢。

powershell enumerate windows-firewall
1个回答
1
投票

速度下降的原因是

Get-NetFirewallPortFilter
对您通过管道传输到它的每个防火墙规则执行相对昂贵的
ASSOCIATORS OF
WMI 查询。

对于超过少数的规则,您只需预先获取all端口过滤器,然后自己进行关联即可获得显着的性能改进:

# index all port filters
$portFilterIndex = @{}
Get-NetFirewallPortFilter -All |ForEach-Object {
  $portFilterIndex[$_.InstanceID] = $_
}

# get relevant rules, grab port filter from index
Get-NetFirewallRule -Direction Inbound |Where-Object Enabled |Select-Object *,@{Name='PortFilter'; Expression = {$portFilterIndex[$_.ID]}}
© www.soinside.com 2019 - 2024. All rights reserved.