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
{
}
}
