I wrote a very simple helper function (you can use it as cmdlet in own module) to simplify work with Get-NetFirewallRule cmdlet.
Examples
Get FW rules from remote server based on multiple protocols and ports
Get-RvNetFirewallRule -Protocol TCP, UDP -LocalPort @(135..138) -CimSession MyRemoteServer | Format-Table
Get disabled rule from the local server based on specified protocol and port
Get-RvNetFirewallRule -Protocol TCP -LocalPort 135 -Enabled:$false | Format-Table
Code
Function Get-RvNetFirewallRule { <# .SYNOPSIS Similar to Get-NetFirewallRule with ability to filter using protocols and ports. .DESCRIPTION Developer Developer: Rudolf Vesely, http://rudolfvesely.com/ Copyright (c) Rudolf Vesely. All rights reserved License: Free for private use only "RV" are initials of the developer's name Rudolf Vesely and distingue names of Rudolf Vesely's cmdlets from the other cmdlets. Description Similar to Get-NetFirewallRule with ability to filter using protocols and ports. Requirements Developed and tested using PowerShell 4.0. .PARAMETER Protocol For example: @('TCP', 'UDP') .PARAMETER LocalPort For example: 80 (HTTP) or @(80, 443, 1433) (HTTP, HTTPS, SQL) .EXAMPLE 'EXAMPLE: Get from remote server' Get-RvNetFirewallRule -Protocol TCP, UDP -LocalPort @(135..138) -CimSession MyRemoteServer | Format-Table .EXAMPLE 'EXAMPLE: Get from local server' Get-RvNetFirewallRule -Protocol TCP -LocalPort 135 -Enabled:$false | Format-Table .INPUTS .OUTPUTS Microsoft.Management.Infrastructure.CimInstance#root/standardcimv2/MSFT_NetFirewallRule .LINK https://techstronghold.com/ #> [CmdletBinding( DefaultParametersetName = 'Protocol', SupportsShouldProcess = $true, PositionalBinding = $false, HelpURI = 'https://techstronghold.com/', ConfirmImpact = 'Medium' )] Param ( [Parameter( Mandatory = $true, Position = 0, ParameterSetName = 'Protocol' )] [string[]]$Protocol, [Parameter( Mandatory = $true, Position = 1 )] [int[]]$LocalPort, [Parameter( Mandatory = $false )] [ValidateSet( 'Inbound', 'Outbound' )] [string]$Direction = 'Inbound', [Parameter( Mandatory = $false )] [bool]$Enabled = $true, [Parameter( Mandatory = $false )] [Microsoft.Management.Infrastructure.CimSession[]]$CimSession ) Begin { # Configurations $ErrorActionPreference = 'Stop' if ($PSBoundParameters['Debug']) { $DebugPreference = 'Continue' } Set-PSDebug -Strict Set-StrictMod $parametersAndArgumentsCommon = @{} if ($CimSession) { $parametersAndArgumentsCommon.Add('CimSession', $CimSession) } } Process { Get-NetFirewallPortFilter -Protocol $Protocol @parametersAndArgumentsCommon | ForEach-Object -Process { if ($LocalPort -contains $_.LocalPort) { $_ } } | Get-NetFirewallRule @parametersAndArgumentsCommon | Where-Object -FilterScript { $_.Enabled.ToString() -eq $Enabled.ToString() -and $_.Direction.ToString() -eq $Direction } } End { } }