Windows Advanced Firewallのルールにグループを作成する方法、または既存のグループに追加する方法はありますか(コマンドプロンプトまたはWSHスクリプトを使用することをお勧めします)。
編集:
長い間私を悩ませてきたこの古い質問の解決策を見つけました!
New-NetFirewallRule TechNetの記事では、New-NetFirewallRuleコマンドレットの-Group
パラメーターについて次のように述べています。
[...]このパラメーターは、DisplayGroupパラメーターのソース文字列を指定します。 [...]ルールグループを使用して、ルールを影響度ごとに整理し、バッチルールを変更できます。 Set-NetFirewallRuleコマンドレットを使用して、ルールまたはセットのセットにグループ名が指定されている場合、そのグループ内のすべてのルールまたはセットが同じ変更のセットを受け取ります。このパラメーター値を、ユニバーサルで世界に対応した間接的な@FirewallAPI名で指定することをお勧めします。
注:DisplayGroupパラメーターは、オブジェクトの作成時に指定できません。 New-NetFirewallRuleコマンドレット。ただし、ドット表記とSet-NetFirewallRuleコマンドレットを使用して変更できます。
チャンスがあるようですね。これを自分で行う方法を見つけようとしているときに、私は次のことを実行しました。
Get-NetFirewallRule -DisplayName "Core Networking - IPv6 (IPv6-In)" | Get-Member
...そして、DisplayGroup
プロパティにはGetメソッドしかありませんが、Group
プロパティ(そのRuleGroup
エイリアスを含む)にはGetメソッドとSetメソッドの両方があることに注意してください。
PowerShellソリューションは次のとおりです:
@maoizmのおかげで、このソリューションは、同じDisplayNameを持つ1つ以上のルールが存在する場合に機能するようになりました。
$RuleName = "NameOfYourFirewallRuleGoesHere"
$RuleGroup = "YourGroupNameGoesHere"
Get-NetFirewallRule -DisplayName $RuleName | ForEach { $_.Group = '$RuleGroup'; Set-NetFirewallRule -InputObject $_ }
そして、これは実際にあなたのルールに割り当てられる新しいグループ名を作成します。
注:netsh
コマンドにはadd group
コマンドがありません。ここで Netsh AdvFirewall Firewall Commands の構文を参照してください。
Windowsファイアウォールのルールは、まとめてバンドルし、グループとしてアクティブ化または非アクティブ化できます。
netsh advfirewall
コマンドファイアウォールにルールを追加できます。スイッチを使用するgroup=
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"
詳細については この記事 を参照してください...
netsh
コマンドラインにはこのためのフラグがありません。
上記のPowerShellソリューションの代替として、グループ名はレジストリハイブの一部です。
実際、.wfw
ファイアウォールのエクスポートは実際には raw regf
レジストリハイブ です。これをレジストリエディタにインポートすると、REG_SZ
パイプ区切り値のリストであることがわかります。
カスタム値は次の場所にあります
HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
これがGoogleのスナップショットですChromeファイアウォールエントリ(読みやすくするために改行が追加されました)
{7E29D2BA-3EBF-4AFD-BF6E-BA6486C74660}
v2.10|
Action=Allow|
Active=TRUE|
Dir=In|
Protocol=17|
LPort=5353|
App=C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe|
Name=Google Chrome (mDNS-In)|
Desc=Inbound rule for Google Chrome to allow mDNS traffic.|
EmbedCtxt=Google Chrome|
「グループ」はEmbedCtxt
の下に保存され、その値はGoogle Chrome
です。
...したがって、同じ手法を使用してレジストリ値を操作できると想定できます...
レジストリエントリを見つける
reg query HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules /f "Google Chrome"
...|EmbedCtx=My Custom Group|
で上書きします|
がないと、値は無視されます。