WindowsファイアウォールのPing応答(ICMP)の許可を有効にするコマンドとバッチファイル

WindowsファイアウォールでPING(ICMPプロトコル)の応答を許可されていないPCに許可する規則を有効にするコマンドを見つけたのでメモ。

netsh advfirewallというコマンドを使えばファイアウォール関連の設定ができるようです。

何台もGUIで設定するのは面倒

例えば、IPv4のアドレスに対してドメインネットワークからのPING応答を許可するとしたら、GUIでは [コントロールパネル]-[Windowsファイアウォール]-[詳細設定]-[セキュリティが強化されたWindowsファイアウォール]-[受信の規則] を開き、

ドメイン用の[ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)]のプロパティを開いて[有効]にチェックを入れます。

この作業が何台も何度もあるとちょっと面倒になってきます。そこでファイアウォール関連の netsh advfirewallコマンド をバッチファイルで保存しておけばクリック一発で設定完了です。

netsh advfirewall コマンド で有効化

コマンドプロンプトは管理者として実行しないとエラーになります。

ICMPv4 エコー要求を許可するルールを有効にするコマンド

ドメインネットワークからIPv4のアドレスからのICMP受信を許可するルールを有効にするとしたら以下となります。

netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes

ICMPv6 エコー要求を許可するルールを有効にするコマンド

IPv6の場合も同様に以下となります。

netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain new enable=yes

逆に無効にしたいとき

無効にする場合は enable=yes の部分を enable=no にすればOKです。

規則が見つかりませんとなるとき

上記のコマンドは既存のルールを更新するので set という命令を使っています(他にルール追加の add 、削除の delete 、確認するための show などもある)が、ルールの名前の指定が name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" と正しくても、profile=** の部分の指定が既存のルールと一致していなと 「指定された条件に一致する規則はありません。」 とエラーになります。

エラーにならない例(プロファイルの指定を変更したいとき)

例えば、既存のルールが ドメイン(domain) のみだけど、 ドメイン(domain) と プライベート(private) を許可するルールを有効に変更したいときは以下のようにします。

netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes profile=domain,private

new より後ろに変更後の profile を追記します。

更に、既存のルールが プライベート(private) と パブリック(public) だけど、 パブリック(public) だけにしてルールを無効に変更したいときは以下のようにします。

netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=private,public new enable=no profile=public

これで正常に変更できるはずです。

状態を確認するコマンド

ちなみに有効か無効かを確認するコマンドは以下となります。

「有効:」の行はいになっていれば有効で、いいえの場合は無効になっています。

 netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)"

設定を変更するときはsetですが、確認するときはshowを使います。上記は、ドメイン、プライベート、パブリックなど、すべての状態を表示しますが、ドメインのみの規則を確認したい場合は以下のようにprofile=domainを追加します。

netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain

バッチファイルのソース

上記のコマンドを使い、有効か無効かを判別して無効になっている場合のみ、有効にするといったバッチファイルの例が以下となります。

@echo off
echo Windowsファイアウォールの"ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)"が有効になっているか確認しています。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain | findstr "有効.*はい$"
if %ERRORLEVEL% equ 0 (
echo IPv4のエコー要求は有効になっています。
) else (
echo IPv4のエコー要求は有効になっていませんでした。有効にしています。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes
)
echo.
echo Windowsファイアウォールの"ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)"が有効になっているか確認しています。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain | findstr "有効.*はい$"
if %ERRORLEVEL% equ 0 (
echo IPv6のエコー要求は有効になっています。
) else (
echo IPv6のエコー要求は有効になっていませんでした。有効にしています。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain new enable=yes
)
pause

コマンドの参考

実行後

コマンドおよびバッチファイル実行後は以下のとおり、無効だったドメインのプロファイルが有効になりました。

前へ

Acrobat Reader DCをオフラインインストールするときのコマンドとレジストリとバッチファイル

次へ

Windows Live Mail(Windows Essentials 2012)をアンインストールするコマンド