Displaying firewall rules with PowerShell is very easy with the Get-NetFirewallRule
cmdlet.
However,
there is a gap: port numbers are not displayed.
Here is what you get with the default view:
There is a cmdlet named Get-NetFirewallPortFilter
but it displays only information related to ports and
you don’t know to which rule it is associated.
And you get the same result when you pipe rules to the Get-NetFirewallPortFilter
cmdlet.
The solution
To display everything in a single output you can use calculated properties. They can be used with several cmdlets
like the Select-Object
or the Format-Table
cmdlets.
Here is an example in which I display only information for the Remote Desktop group.
Get-NetFirewallRule -DisplayGroup 'Remote Desktop' | Format-Table -Property Name, DisplayName, DisplayGroup, @{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}}, @{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}}, @{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}}, @{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}}, Enabled, Profile, Direction, Action
And as you can notice, the output displays now ports as well.
Luc, thank you so much for this post. I’ve been trying various method to get a good firewall report for a current project. This bit a code is by far the best I’ve seen, elegant in its simplicity – Keith Risinger
LikeLiked by 1 person
Actually if you pipe get-netfirewallportfilter to “fl *”, you’ll see the names of the rules.
LikeLiked by 1 person
Correct! Thanks for sharing!
LikeLike