Skip to content

Get-FirewallRuleInfo

Windows: Retrieves detailed firewall rule configuration

#Requires -Version 5.1
#Requires -Modules NetSecurity

[CmdletBinding()]
Param
(
    [string]$ComputerName = $env:COMPUTERNAME,

    [string]$Name = "*",

    [switch]$EnabledOnly,

    [pscredential]$Credential
)

Process {
    try {
        $session = $null
        $ruleParams = @{
            'ErrorAction' = 'Stop'
        }

        if ($EnabledOnly) {
            $ruleParams.Add('Enabled', 'True')
        }

        if ($ComputerName -ne $env:COMPUTERNAME) {
            $sessionParams = @{
                'ComputerName' = $ComputerName
            }
            if ($null -ne $Credential) {
                $sessionParams.Add('Credential', $Credential)
            }
            $session = New-CimSession @sessionParams
            $ruleParams.Add('CimSession', $session)
        }

        $rules = Get-NetFirewallRule @ruleParams | Where-Object { $_.DisplayName -like $Name -or $_.Name -like $Name }

        $results = foreach ($rule in $rules) {
            # Get port details (requires Get-NetFirewallPortFilter)
            $ports = $rule | Get-NetFirewallPortFilter @ruleParams -ErrorAction SilentlyContinue
            
            [PSCustomObject]@{
                DisplayName  = $rule.DisplayName
                Group        = $rule.Group
                Enabled      = $rule.Enabled
                Profile      = $rule.Profile
                Direction    = $rule.Direction
                Action       = $rule.Action
                LocalPort    = if ($ports) { $ports.LocalPort } else { "Any" }
                Protocol     = if ($ports) { $ports.Protocol } else { "Any" }
                ComputerName = $ComputerName
            }
        }

        Write-Output ($results | Sort-Object DisplayName)
    }
    catch {
        throw
    }
    finally {
        if ($null -ne $session) {
            Remove-CimSession $session
        }
    }
}
}

Specifies the name of the computer to query. Defaults to the local computer.

Specifies the display name or internal name of the rule to retrieve. Supports wildcards.

Off

If set, only retrieves rules that are currently enabled.

Specifies a PSCredential object for remote connection.

An interactive directory of PowerShell scripts.