如何使用自定义组名添加 Windows 防火墙规则?
Posted
技术标签:
【中文标题】如何使用自定义组名添加 Windows 防火墙规则?【英文标题】:How can I add a Windows firewall rule with a custom group name? 【发布时间】:2012-08-10 23:31:32 【问题描述】:我知道我可以使用netsh advfirewall firewall add rule
或wf.msc
创建新的防火墙规则;但是当我以这种方式创建规则时,它不会有 groupName,因此我无法同时管理多个规则。
有没有办法为某些防火墙规则指定 groupName?
【问题讨论】:
【参考方案1】:好的!我知道我现在应该怎么做 :)
使用PowerShell
和WMI 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 防火墙本身中为规则设置一个组,通过属性、右键单击等。以上是关于如何使用自定义组名添加 Windows 防火墙规则?的主要内容,如果未能解决你的问题,请参考以下文章