有没有办法在Windows高级防火墙中创build组或添加到现有组中的规则(最好通过命令提示符或WSH脚本)。
编辑:
find了这个老问题的解决scheme,这个问题也一直困扰着我很久!
新的NetFirewallRule TechNet文章陈述了有关New-NetFirewallRule命令行开关的-Group
参数:
[…]该参数指定DisplayGroup参数的源string。 […]规则组可用于按影响组织规则,并允许批量规则修改。 使用Set-NetFirewallRule cmdlet,如果为一组规则或集合指定了组名称,则该组中的所有规则或集合都会接收相同的一组修改。 指定此参数值是一个很好的习惯,使用通用的,世界级的间接@FirewallAPI名称。
注意 :在使用New-NetFirewallRule cmdlet创build对象时,不能指定DisplayGroup参数,但可以使用点符号和Set-NetFirewallRule cmdlet修改该参数。
听起来好像有机会吧? 在试图找出如何做到这一点,我跑了以下几点:
Get-NetFirewallRule -DisplayName "Core Networking - IPv6 (IPv6-In)" | Get-Member
…并注意到DisplayGroup
属性只有一个Get方法,但Group
属性(及其RuleGroup
别名)同时具有Get和Set方法。
PowerShell解决scheme如下所示:
感谢@maoizm,当存在一个或多个具有相同DisplayName的规则时,此解决scheme现在可以工作:
$RuleName = "NameOfYourFirewallRuleGoesHere" $RuleGroup = "YourGroupNameGoesHere" Get-NetFirewallRule -DisplayName $RuleName | ForEach { $_.Group = '$RuleGroup'; Set-NetFirewallRule -InputObject $_ }
这实际上会创build一个新的组名称分配给您的规则。
注意 : netsh
命令没有add group
命令。 请参阅Netsh AdvFirewall防火墙命令的语法。
Windows防火墙中的规则可以捆绑在一起并作为一组激活或停用。
使用netsh advfirewall
命令,您可以将规则添加到防火墙。 使用开关group=
来pipe理AdvFirewall组。
使用这样的东西:
netsh advfirewall firewall set rule profile=domain group="Remote Desktop" new enable=Yes
当你特别提到
通过命令提示符
我会假设你的意思是使用脚本。 与2008年,你可以使用PowerShell。 它非常简单:
function Add-FirewallRule { param( $name, $tcpPorts, $appName = $null, $serviceName = $null ) $fw = New-Object -ComObject hnetcfg.fwpolicy2 $rule = New-Object -ComObject HNetCfg.FWRule $rule.Name = $name if ($appName -ne $null) { $rule.ApplicationName = $appName } if ($serviceName -ne $null) { $rule.serviceName = $serviceName } $rule.Protocol = 6 #NET_FW_IP_PROTOCOL_TCP $rule.LocalPorts = $tcpPorts $rule.Enabled = $true $rule.Grouping = "@firewallapi.dll,-23255" $rule.Profiles = 7 # all $rule.Action = 1 # NET_FW_ACTION_ALLOW $rule.EdgeTraversal = $false $fw.Rules.Add($rule) } # Sample Usage Add-FirewallRule "Test port 1234" "1234" $null $null Add-FirewallRule "Test port 5555-6666" "5555-6666" $null $null Add-FirewallRule "Test port 2222 Calc" 2222 "c:\windows\system32\calc.exe" $null Add-FirewallRule "Test port 3333 W3SVC" 3333 $null "W3SVC"
看到这篇文章的更多细节…