【问题标题】:How can I add a Windows firewall rule with a custom group name?如何使用自定义组名添加 Windows 防火墙规则?
【发布时间】:2012-08-10 23:31:32
【问题描述】:

我知道我可以使用netsh advfirewall firewall add rulewf.msc 创建新的防火墙规则;但是当我以这种方式创建规则时,它不会有 groupName,因此我无法同时管理多个规则。

有没有办法为某些防火墙规则指定 groupName

【问题讨论】:

    标签: windows-firewall windows-networking


    【解决方案1】:

    好的!我知道我现在应该怎么做 :)
    使用PowerShellWMI COM-Objects 我可以做我想做的事!
    这是我为添加防火墙规则而编写的ps1 脚本,以便我可以远程连接到我的SQL Server

    function isFirewallPortOpen {
        param( [int] $port )
        $fw = New-Object -ComObject hnetcfg.fwpolicy2 
        if ($fw.Rules | Where {$_.LocalPorts -eq $port }) {
            return [bool]$true
        } else {
            return [bool]$false
        }
    }
    
    function existsFirewallRule {
        param( [string] $name )
        $fw = New-Object -ComObject hnetcfg.fwpolicy2 
        if ($fw.Rules | Where { $_.Name -eq $name }) {
            return [bool]$true
        } else {
            return [bool]$false
        }
    }
    
    function addFirewallRule {
        param(
            [string] $name,
            [int] $port,
            [int] $protocol
        )
        $fw = New-Object -ComObject hnetcfg.fwpolicy2 
        if (isFirewallPortOpen $port -or existsFirewallRule $name) {
            Write-Host -ForegroundColor:Red "**Rule Already Exists or Port Already Open."
        } else {
            $rule = New-Object -ComObject HNetCfg.FWRule
    
            $rule.Name = $name
            $rule.Protocol = $protocol # 6=NET_FW_IP_PROTOCOL_TCP and 17=NET_FW_IP_PROTOCOL_UDP
            $rule.LocalPorts = $port
            $rule.Enabled = $true
            $rule.Grouping = "SQL Server"
            $rule.Profiles = 7 # all
            $rule.Action = 1 # NET_FW_ACTION_ALLOW
            $rule.EdgeTraversal = $false
    
            $fw.Rules.Add($rule)
            Write-Host -ForegroundColor:Blue "A rule named '$name' has been added to Windows' Firewall."
        }
    }
    
    addFirewallRule -name:"Transact SQL Debugger" -port:135 -protocol:6
    addFirewallRule -name:"SQL Traffic" -port:1433 -protocol:6
    addFirewallRule -name:"SQL Browser Traffic" -port:1434 -protocol:17
    addFirewallRule -name:"SQL Analytics Traffic" -port:2383 -protocol:6
    addFirewallRule -name:"SQL Broker Traffic" -port:4022 -protocol:6
    

    【讨论】:

      【解决方案2】:
      $fw= New-Object -ComObject hnetcfg.fwpolicy2
      $fw.rules | ? {$_.name -like "*sql*"} | ft name,grouping
      $fw.rules | ? {$_.name -like "*sql*"} | % {$gn="_mssqlservices";$_.grouping = $gn}
      $fw.rules | ? {$_.name -like "*sql*"} | ft name,grouping
      

      【讨论】:

      • 欢迎来到堆栈溢出,通过提供解释和代码,您的答案将更有用。
      • 对于那些不知道“ft”或“%”或“?”是什么意思的未来读者,ft 是“Format-Table”,%是“ForEach-Object”,? 是“Where-Object
      【解决方案3】:

      以下 Powershell 单行代码为 DisplayName='GTA V' 的规则添加/重命名组名称。适用于 Windows 8+

      Get-NetFirewallRule -DisplayName 'GTA V' | ForEach { $_.Group = 'games'; Set-NetFirewallRule -InputObject $_ }

      【讨论】:

        【解决方案4】:
        $rule = Get-NetFirewallRule -Name 'nameme'; $rule.Group = 'nameme'; $rule | Set-NetFirewallRule; 
        netsh advfirewall firewall show rule name=nameme
        netsh advfirewall set allprofiles state on
        netsh advfirewall set allgroups on
        netsh advfirewall firewall add rule name="nameme" dir=out action=Allow
        netsh advfirewall export "C:\temp\WFconfiguration.wfw"
        netsh advfirewall import "C:\temp\WFconfiguration.wfw"
        

        注意:您必须先在 Windows 防火墙中创建规则名称,然后将 nameme 更改为名称运行 PowerShell 管理员。

        组名=任意

        现在管理 Windows 防火墙比以往任何时候都更容易去下载吧

        【讨论】:

        • “现在管理 Windows 防火墙比以往任何时候都容易”不,它比 以前更容易。比以往任何时候都更容易的是只允许在 Windows 防火墙本身中为规则设置一个组,通过属性、右键单击等。
        猜你喜欢
        • 1970-01-01
        • 2021-04-26
        • 2016-07-30
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        • 1970-01-01
        相关资源
        最近更新 更多