我知道我可以使用netsh advfirewall firewall add rule
或wf.msc
來創建新的防火牆規則;但是當我這樣創建規則時,它不會有groupName,因此我無法同時管理多個規則。如何使用自定義組名稱添加widows防火牆規則?
有沒有辦法爲某些防火牆規則指定groupName?
我知道我可以使用netsh advfirewall firewall add rule
或wf.msc
來創建新的防火牆規則;但是當我這樣創建規則時,它不會有groupName,因此我無法同時管理多個規則。如何使用自定義組名稱添加widows防火牆規則?
有沒有辦法爲某些防火牆規則指定groupName?
好的!我知道現在該怎麼做:)
使用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
$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
以下Powershell的單行添加/重命名組名稱與顯示名稱= 'GTA V' 的規則。適用於Windows 8+
Get-NetFirewallRule -DisplayName 'GTA V' | ForEach { $_.Group = 'games'; Set-NetFirewallRule -InputObject $_ }
歡迎堆棧溢出,通過提供一個解釋,以及代碼的答案將是更多的使用。 – 2013-03-09 03:10:45
對於那些不知道「ft'」或「'%'」或「'''」意味着什麼的讀者,'ft'是''Format-Table'「,'%'是''ForEach- Object'「和'?'是」Where-Object'「 – Achilles 2013-03-09 10:46:03