On Windows XP and Windows Server 2003, I can know currently open ports on the Windows Firewall using the following command:

netsh firewall show state

However, on Windows 7 and Hyper-V Server 2008 R2, when I give that command, it says:

No ports are currently open on all network interfaces.

IMPORTANT: Command executed successfully.
However, "netsh firewall" is deprecated;
use "netsh advfirewall firewall" instead.

Apparently there are ports open because services such as NetBIOS NS, Remote Desktop, and Hyper-V remote administration are functioning.

I tried a few 'netsh advfirewall' show commands, but didn't get a way to find out which ports are permit by Windows Firewall.

Knowing the currently open ports, I can be sure that I'm permitting necessary and sufficient traffic to pass in, no more, no less.

Going through the whole set of advanced firewall rules is so tedious and error-prone.

Is there a command on Windows 7 and Windows Server 2008 to do this efficiently?

  • How is it error prone?
    – joeqwerty
    Jan 11, 2011 at 12:03
  • There are so many rules while I'm just interested in the effective ones.
    – QIU Quan
    Jan 11, 2011 at 12:06
  • 1
    And that makes it error prone?
    – joeqwerty
    Jan 11, 2011 at 12:07
  • Yeah. Examining dozens of rules in a second is error prone.
    – QIU Quan
    Jan 11, 2011 at 12:18
  • Prone to what errors exactly? Reading them wrong? Why are you trying to read them in one second? Try slowing down a little bit. In addition, in the GUI you can filter the view by the state of the rule, so you could filter it to show only those rules that are enabled.
    – joeqwerty
    Jan 11, 2011 at 12:26

1 Answer 1


The reason you can't get the same results using the same commands is that the Win7 firewall rules can be specific to an individual application, and configured per network type (Private, Domain, Public), protocol, port, etc. Powershell should give you a much better way to query this information and sort it. Here's a quick script I have to dump my configuration, when I need it.

Function Get-EnabledRules
    $rules = (New-Object -comObject HNetCfg.FwPolicy2).rules
    $rules = $rules | where-object {$_.Enabled -eq $true}
    $rules = $rules | where-object {$_.Profiles -bAND $profile}

$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
 $connections = $networkListManager.GetNetworkConnections()
[int[] ] $connTypes = @()
$connTypes = ($connections | % {$_.GetNetwork().GetCategory()})
#$connTypes += 1
Write-Host $connTypes

$connTypes | ForEach-Object {Get-EnabledRules -profile $_ | sort localports,Protocol | format-table -wrap -autosize -property Name, @{Label="Action"; expression={$_.action}}, @{Label="Protocol"; expression={$_.protocol}}, localPorts,applicationname}

A lot of this was based off of this post on MSDN

  • what is this -> GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}") Feb 27, 2021 at 21:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .