我想枚举我的 Windows 防火墙规则,但运行需要一段时间...
Measure-Command {
$FirewallRules = Get-NetFirewallRule |
where {
$_.Enabled -eq $true -and
$_.Direction -eq 'Inbound'
} | Get-NetFirewallPortFilter
}
TotalSeconds : 6,3937642
没有获取实际的端口过滤器(
Get-NetFirewallPortFilter
),枚举只是
TotalSeconds : 0,3220308
有没有更快的方法来完成这个?
编辑:如果有任何替代代码适用于普通用户帐户,我会更喜欢。
速度下降的原因是
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]}}