【bat】netshコマンド完全ガイド|IPアドレス設定・WiFiパスワード確認・ファイアウォール・プロキシ・ネットワークリセットまで

【bat】netshコマンド完全ガイド|IPアドレス設定・WiFiパスワード確認・ファイアウォール・プロキシ・ネットワークリセットまで bat

netsh(Network Shell)はWindowsのネットワーク設定をコマンドラインから操作できる強力なツールです。IPアドレスの変更、WiFiパスワードの確認、ファイアウォールルールの追加、プロキシ設定など「GUIで毎回やっているあの操作」をバッチファイルで自動化できます。

本記事ではnetshの主要サブコマンドを体系的に整理し、そのままコピーして使える実践パターンとともに解説します。

スポンサーリンク

netshとは

netshはWindows 2000以降に標準搭載されたネットワーク設定の統合コマンドです。対話モードとスクリプトモードの両方に対応しており、バッチファイルから直接呼び出すことでネットワーク設定の自動化・定型作業の効率化が可能です。

サブコンテキスト 主な用途
netsh int ip / ipv4 / ipv6 IPアドレス・ルーティング・DNS設定
netsh wlan WiFi接続・プロファイル管理・パスワード確認
netsh advfirewall Windowsファイアウォールのルール管理
netsh winhttp システムプロキシ設定(WinHTTP)
netsh interface NICの有効化・無効化・統計確認
netsh winsock Winsockカタログのリセット
netsh http HTTPリスナー・SSL証明書のバインド管理
管理者権限が必要な操作
IPアドレス設定・ファイアウォールルール追加・ネットワークリセットなど、設定を変更するコマンドには管理者権限が必要です。バッチファイルは必ず「管理者として実行」してください。

アダプター名の確認方法

netshの多くのコマンドはアダプター(NIC)名の指定が必要です。環境によって「イーサネット」「イーサネット 2」「Wi-Fi」など異なるため、先に確認しましょう。

アダプター名確認.bat
@echo off
:: 全インターフェース一覧(名前・状態・タイプを表示)
netsh interface show interface

:: --- 出力例 ---
:: 管理状態     状態             タイプ       インターフェイス名
:: enabled      Connected        Dedicated    イーサネット
:: enabled      Connected        Dedicated    Wi-Fi
:: enabled      Disconnected     Dedicated    イーサネット 2
アダプター名を変数に自動取得.bat
@echo off
setlocal enabledelayedexpansion

:: 接続済み有線NICの名前を自動取得
for /f "tokens=4*" %%a in ('netsh interface show interface ^| findstr /i "Connected.*Dedicated"') do (
    set ADAPTER=%%b
    goto :got_adapter
)
:got_adapter
echo 使用するアダプター: %ADAPTER%

IPアドレス・DNS設定

現在のIP設定を確認する

IP設定確認.bat
@echo off
:: すべてのアダプターのIP設定を表示
netsh int ip show config

:: 特定アダプターの設定を表示
netsh int ip show config name="イーサネット"

:: IPアドレス一覧のみ
netsh int ip show address

:: DNSサーバー一覧
netsh int ip show dns

:: ルーティングテーブル
netsh int ip show route

静的IPアドレスを設定する

静的IP設定.bat
@echo off
:: ※ 管理者権限で実行すること
set ADAPTER=イーサネット
set IP=192.168.1.100
set MASK=255.255.255.0
set GW=192.168.1.1
set DNS1=8.8.8.8
set DNS2=8.8.4.4

:: IPアドレス・サブネットマスク・デフォルトゲートウェイを設定
netsh int ip set address name="%ADAPTER%" static %IP% %MASK% %GW%

:: プライマリDNSを設定
netsh int ip set dns name="%ADAPTER%" static %DNS1%

:: セカンダリDNSを追加(index=2 で2番目に登録)
netsh int ip add dns name="%ADAPTER%" %DNS2% index=2

echo 静的IP設定完了
netsh int ip show config name="%ADAPTER%"

DHCPに切り替える

DHCP切り替え.bat
@echo off
:: ※ 管理者権限で実行すること
set ADAPTER=イーサネット

:: DHCPでIPアドレスを自動取得
netsh int ip set address name="%ADAPTER%" dhcp

:: DNSも自動取得に切り替え
netsh int ip set dns name="%ADAPTER%" dhcp

:: リース取得
ipconfig /release "%ADAPTER%"
ipconfig /renew   "%ADAPTER%"

echo DHCP切り替え完了

DNSサーバーをカスタム設定に変更する

プロバイダのDNSが遅い・不安定な場合や、社内DNSを一時的に変更したい場合に使います。

DNS変更.bat
@echo off
:: ※ 管理者権限で実行すること
set ADAPTER=イーサネット

:: Google Public DNS に変更
netsh int ip set dns name="%ADAPTER%" static 8.8.8.8
netsh int ip add dns name="%ADAPTER%" 8.8.4.4 index=2
echo Google DNS に設定しました

:: --- または Cloudflare DNS ---
:: netsh int ip set dns name="%ADAPTER%" static 1.1.1.1
:: netsh int ip add dns name="%ADAPTER%" 1.0.0.1 index=2

:: DNSキャッシュをクリア(設定変更後は推奨)
ipconfig /flushdns

:: 設定確認
netsh int ip show dns name="%ADAPTER%"
よく使われるパブリックDNS

サービス プライマリ セカンダリ
Google Public DNS 8.8.8.8 8.8.4.4
Cloudflare DNS 1.1.1.1 1.0.0.1
Quad9 DNS 9.9.9.9 149.112.112.112

WiFi関連(netsh wlan)

WiFiパスワードを確認する

過去に接続したことのあるWiFiのパスワードをバッチから確認できます。

wifi_password.bat
@echo off
:: 保存済みWiFiプロファイル一覧
netsh wlan show profiles

:: 特定SSIDのパスワードを確認(key=clear でパスワード表示)
netsh wlan show profile name="SSID名" key=clear

:: パスワード行のみ抽出
netsh wlan show profile name="SSID名" key=clear | findstr /i "Key Content"

保存済みWiFiのパスワードを一括取得する

wifi_all_passwords.bat
@echo off
setlocal enabledelayedexpansion
echo === 保存済みWiFiパスワード一覧 ===

:: プロファイル名を一覧取得してループ
for /f "tokens=2 delims=:" %%p in ('netsh wlan show profiles ^| findstr /r "すべてのユーザー.*:"') do (
    set "SSID=%%p"
    :: 前後の空白を除去
    for /f "tokens=*" %%s in ("!SSID!") do set "SSID=%%s"
    for /f "tokens=2 delims=:" %%k in ('netsh wlan show profile name="!SSID!" key=clear 2^>nul ^| findstr /i "Key Content"') do (
        echo SSID: !SSID! / PW:%%k
    )
)
Key Content が表示されない場合

  • 管理者権限なし → バッチを「管理者として実行」する
  • オープンネットワーク(パスワードなし)→ パスワードが存在しないため表示されない
  • WPA2-Enterprise(証明書認証)→ パスワードではなく証明書で認証するため表示されない

WiFi接続・切断・削除

wifi_control.bat
@echo off
:: ※ 管理者権限で実行すること

:: 保存済みプロファイルに接続
netsh wlan connect name="SSID名"

:: WiFiを切断
netsh wlan disconnect

:: 保存済みプロファイルを削除
netsh wlan delete profile name="SSID名"

:: 全プロファイルを削除(端末リセット時など)
netsh wlan delete profile name=* i=*

:: WiFiアダプターを無効化・有効化
netsh interface set interface "Wi-Fi" disable
netsh interface set interface "Wi-Fi" enable

WiFiプロファイルのエクスポート・インポート

PCの入れ替えや大量展開時にWiFi設定を引き継ぐパターンです。

wifi_export_import.bat
@echo off
:: ※ 管理者権限で実行すること
set EXPORT_DIR=C:\wifi_profiles
if not exist "%EXPORT_DIR%" mkdir "%EXPORT_DIR%"

:: 全プロファイルをXMLにエクスポート(パスワードも含む)
netsh wlan export profile folder="%EXPORT_DIR%" key=clear
echo エクスポート完了: %EXPORT_DIR%

:: --- 別PCへのインポート ---
for /r "%EXPORT_DIR%" %%f in (*.xml) do (
    netsh wlan add profile filename="%%f" user=all
    echo インポート: %%~nxf
)

現在の接続状態を確認する

wifi_status.bat
@echo off
:: 接続中のWiFi情報を表示
netsh wlan show interfaces

:: 周辺のSSIDスキャン結果を表示
netsh wlan show networks mode=bssid

:: ドライバー情報を表示
netsh wlan show drivers

Windowsファイアウォール(netsh advfirewall)

ファイアウォールの状態確認

firewall_check.bat
@echo off
:: 全プロファイル(ドメイン/プライベート/パブリック)の状態を確認
netsh advfirewall show allprofiles

:: 受信ルール一覧
netsh advfirewall firewall show rule name=all dir=in

:: 送信ルール一覧
netsh advfirewall firewall show rule name=all dir=out

:: 特定ポートに関するルールを検索
netsh advfirewall firewall show rule name=all | findstr "8080"

:: 有効なルールのみ表示
netsh advfirewall firewall show rule name=all | findstr /i "enabled"

ルールの追加・削除・変更

firewall_rules.bat
@echo off
:: ※ 管理者権限で実行すること

:: TCPポート8080の受信を許可
netsh advfirewall firewall add rule name="Allow TCP 8080" protocol=TCP dir=in localport=8080 action=allow

:: UDPポート5353の受信を許可
netsh advfirewall firewall add rule name="Allow UDP 5353" protocol=UDP dir=in localport=5353 action=allow

:: 特定のアプリケーションの送受信を許可
netsh advfirewall firewall add rule name="Allow MyApp" program="C:\app\myapp.exe" action=allow dir=in

:: 特定IPアドレスからの受信のみ許可
netsh advfirewall firewall add rule name="Allow from Office" protocol=TCP dir=in localport=3389 remoteip=192.168.1.0/24 action=allow

:: ルールを無効化(削除せずに止める)
netsh advfirewall firewall set rule name="Allow TCP 8080" new enable=no

:: ルールを有効化
netsh advfirewall firewall set rule name="Allow TCP 8080" new enable=yes

:: ルールを削除
netsh advfirewall firewall delete rule name="Allow TCP 8080"

ファイアウォールルールの冪等設定

環境構築スクリプトでは「既存ルールを先に削除→追加」の順で冪等に設定します。

firewall_idempotent.bat
@echo off
:: ※ 管理者権限で実行すること

set APP_NAME=MyWebApp

:: 既存ルールを削除(初回は何もしないので >nul 2>&1 でエラーを無視)
netsh advfirewall firewall delete rule name="%APP_NAME% HTTP"  >nul 2>&1
netsh advfirewall firewall delete rule name="%APP_NAME% HTTPS" >nul 2>&1

:: ルールを追加
netsh advfirewall firewall add rule name="%APP_NAME% HTTP"  protocol=TCP dir=in localport=80  action=allow
netsh advfirewall firewall add rule name="%APP_NAME% HTTPS" protocol=TCP dir=in localport=443 action=allow

echo ファイアウォールルール設定完了
netsh advfirewall firewall show rule name="%APP_NAME% HTTP"

プロキシ設定(netsh winhttp)

netsh winhttpはWindowsシステム全体のWinHTTPプロキシ設定を操作します。Windows Updateやバックグラウンドサービスが使うプロキシを設定したい場合に使います。

WinHTTPプロキシとWinINETプロキシの違い

WinHTTP(netsh winhttp) WinINET(IE/Edge設定)
使用主体 システムサービス・バックグラウンドアプリ・Windows Update ブラウザ・ユーザーアプリ
設定方法 netsh winhttp set proxy インターネットオプション / レジストリ
スコープ システム全体 ログインユーザーごと

社内環境では両方の設定が必要なことがあります。

proxy_settings.bat
@echo off
:: ※ 管理者権限で実行すること

:: 現在のWinHTTPプロキシ設定を確認
netsh winhttp show proxy

:: プロキシを設定(HTTPとHTTPS両方・バイパスリスト付き)
netsh winhttp set proxy proxy-server="http=proxy.example.com:8080;https=proxy.example.com:8080" bypass-list="*.local;192.168.*;localhost"

:: IEのプロキシ設定をWinHTTPに同期(簡単な方法)
netsh winhttp import proxy source=ie

:: プロキシを解除してダイレクト接続に戻す
netsh winhttp reset proxy

HTTPリスナー・SSL証明書管理(netsh http)

ローカルでHTTPSサーバーを立ち上げる開発環境では、netsh httpでSSL証明書をポートにバインドする操作が必要になることがあります。

http_ssl_bind.bat
@echo off
:: ※ 管理者権限で実行すること

:: 現在のSSL証明書バインド一覧を確認
netsh http show sslcert

:: 現在のURLリスナー(URL ACL)一覧を確認
netsh http show urlacl

:: URLへのアクセス権をユーザーに付与(管理者以外のユーザーがHTTPを使う場合)
netsh http add urlacl url="http://+:8080/" user="DOMAIN\AppUser"

:: URLアクセス権を削除
netsh http delete urlacl url="http://+:8080/"

:: ポートにSSL証明書をバインド
:: (証明書のサムプリントとAppIDは事前に確認が必要)
rem netsh http add sslcert ipport=0.0.0.0:443 certhash=<証明書サムプリント> appid={<GUID>}

:: SSLバインドを削除
rem netsh http delete sslcert ipport=0.0.0.0:443

ネットワークリセット

ネットワーク接続の不具合が解消しない場合、netshでTCP/IPスタックとWinsockをリセットするのが効果的です。

コマンド 効果 再起動
netsh int ip reset TCP/IP設定を初期化(静的IP設定も消える) 必要
netsh int ipv6 reset IPv6スタックを初期化 必要
netsh winsock reset Winsockカタログを初期化(LSPが壊れた時に有効) 必要
netsh winhttp reset proxy WinHTTPプロキシをデフォルトに戻す 不要
ipconfig /flushdns DNSキャッシュをクリア 不要
network_reset.bat
@echo off
:: ※ 管理者権限で実行すること
:: ※ 実行後に再起動が必要

echo ネットワークスタックをリセットします...

:: TCP/IPスタックをリセット(ログファイルに詳細を記録)
netsh int ip reset "%TEMP%\ip_reset.log"

:: IPv6スタックをリセット
netsh int ipv6 reset

:: Winsockカタログをリセット
netsh winsock reset

:: DNSキャッシュをクリア
ipconfig /flushdns

:: WinHTTPプロキシをリセット
netsh winhttp reset proxy

echo.
echo リセット完了。PCを再起動してください。
echo リセットログ: %TEMP%\ip_reset.log
pause
shutdown /r /t 30 /c "ネットワークリセット後の再起動"
静的IP設定が消えることに注意
netsh int ip resetを実行するとTCP/IP設定が初期化されるため、静的IPアドレスの設定も消えます。実行前にnetsh int ip show config > backup.txtで現在の設定をバックアップしておきましょう。

実践パターン

パターン1: 環境切り替えツール(社内・現場・自宅)

network_switcher.bat
@echo off
setlocal
set ADAPTER=イーサネット

echo ==============================
echo  ネットワーク環境切り替えツール
echo ==============================
echo 1. 社内ネットワーク(192.168.1.x)
echo 2. 現場ネットワーク(10.0.0.x)
echo 3. 自宅(DHCP)
echo ==============================
set /p CHOICE=番号を入力してください [1-3]: 

if "%CHOICE%"=="1" (
    call :set_static 192.168.1.100 255.255.255.0 192.168.1.1 192.168.1.1
    echo 社内ネットワークに設定しました
    goto :show
)
if "%CHOICE%"=="2" (
    call :set_static 10.0.0.100 255.255.255.0 10.0.0.1 8.8.8.8
    echo 現場ネットワークに設定しました
    goto :show
)
if "%CHOICE%"=="3" (
    netsh int ip set address name="%ADAPTER%" dhcp
    netsh int ip set dns    name="%ADAPTER%" dhcp
    ipconfig /release "%ADAPTER%" >nul 2>&1
    ipconfig /renew   "%ADAPTER%" >nul 2>&1
    echo 自宅ネットワーク(DHCP)に設定しました
    goto :show
)
echo 無効な選択です
exit /b 1

:set_static
netsh int ip set address name="%ADAPTER%" static %1 %2 %3
netsh int ip set dns    name="%ADAPTER%" static %4
exit /b

:show
ipconfig | findstr "IPv4"

パターン2: ネットワーク診断レポート

ネットワーク障害発生時に情報を一括収集してファイルに保存するバッチです。netstatも組み合わせてポート状態も記録します。

net_diagnosis.bat
@echo off
setlocal
set REPORT=C:\logs\net_report_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%.txt
set REPORT=%REPORT: =0%
if not exist C:\logs mkdir C:\logs

echo ネットワーク診断レポートを作成中...
(
    echo === 診断日時: %DATE% %TIME% ===
    echo.
    echo [ipconfig /all]
    ipconfig /all
    echo.
    echo [netsh int ip show config]
    netsh int ip show config
    echo.
    echo [netsh wlan show interfaces]
    netsh wlan show interfaces
    echo.
    echo [netsh advfirewall show allprofiles]
    netsh advfirewall show allprofiles state
    echo.
    echo [netsh winhttp show proxy]
    netsh winhttp show proxy
    echo.
    echo [netstat -ano]
    netstat -ano
    echo.
    echo [route print]
    route print
) > "%REPORT%"

echo 診断レポート作成完了: %REPORT%

パターン3: ファイアウォールルールの定期監査

schtasksと組み合わせて週次で実行し、想定外のルールが追加されていないかを監視します。

firewall_audit.bat
@echo off
setlocal
set LOG_DIR=C:\logs\firewall_audit
set DATE_STR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"

set TODAY=%LOG_DIR%\fw_%DATE_STR%.txt

:: 受信・送信ルールを全取得
netsh advfirewall firewall show rule name=all > "%TODAY%"

:: 直近ログと差分チェック
set PREV=
for /f %%f in ('dir /b /o-d "%LOG_DIR%\fw_*.txt" 2^>nul') do (
    if "%%f" neq "fw_%DATE_STR%.txt" (
        if "!PREV!"=="" set PREV=%LOG_DIR%\%%f
    )
)

if "%PREV%"=="" (
    echo 前回ログなし。初回実行です。
    goto :end
)

fc "%PREV%" "%TODAY%" > nul 2>&1
if %errorlevel% neq 0 (
    echo [警告] ファイアウォールルールに変更があります
    fc "%PREV%" "%TODAY%"
) else (
    echo [OK] ファイアウォールルールに変更なし
)

:end
echo 監査完了: %TODAY%

パターン4: 接続不良時の段階的自動復旧

定期的に接続を確認し、切断が続いたらNICリセット→IPアドレス再取得→ネットワークスタックリセットと段階的に復旧を試みます。詳しい監視ループの実装はネットワーク接続の継続監視・自動復旧バッチも参照してください。

auto_network_recovery.bat
@echo off
setlocal enabledelayedexpansion
set ADAPTER=イーサネット
set PING_TARGET=8.8.8.8
set FAIL=0

:loop
ping -n 1 -w 3000 %PING_TARGET% >nul 2>&1
if %errorlevel% equ 0 (
    set FAIL=0
    timeout /t 60 /nobreak >nul
    goto :loop
)
set /a FAIL+=1
echo [%TIME%] 接続失敗 (%FAIL%回目)

if !FAIL! equ 1 (
    echo NICを再起動します...
    netsh interface set interface "%ADAPTER%" disable
    timeout /t 5 /nobreak >nul
    netsh interface set interface "%ADAPTER%" enable
    timeout /t 15 /nobreak >nul
    goto :loop
)
if !FAIL! equ 2 (
    echo IPアドレスを再取得します...
    ipconfig /release "%ADAPTER%" >nul 2>&1
    ipconfig /renew   "%ADAPTER%" >nul 2>&1
    ipconfig /flushdns >nul
    goto :loop
)
if !FAIL! geq 3 (
    echo ネットワークスタックをリセットして再起動します...
    netsh int ip reset >nul
    netsh winsock reset >nul
    shutdown /r /t 60 /c "ネットワーク障害により自動再起動"
)
goto :loop

よくあるエラーと対処

エラー・症状 原因 対処
アクセスが拒否されました 管理者権限なし バッチファイルを「管理者として実行」する
指定されたオブジェクトが見つかりません(インターフェース名) NIC名が誤っている netsh interface show interfaceで正確な名前を確認する
Key Content が表示されない(WiFiパスワード) 管理者権限不足またはオープンネットワーク 管理者権限で実行する。WPA2/WPA3暗号化済みのネットワークのみパスワードが保存される
プロキシ設定が反映されない WinHTTPとWinINETで設定先が違う netsh winhttp import proxy source=ieでIE設定を同期する
リセット後も症状が改善しない 物理的な問題またはルーター側の障害 ルーター再起動・LANケーブル確認・プロバイダへの問い合わせを実施する
netsh wlan show profile でプロファイルが表示されない WLANサービスが停止している net start wlansvcでWLANサービスを起動する

netsh と PowerShell の使い分け

観点 netsh PowerShell
対応OS Windows 2000〜現行(全バージョン) Windows 8/Server 2012以降
バッチ親和性 ◎ .batから直接呼べる △ -Commandオプションが必要
WiFiプロファイル ◎ 詳細操作・エクスポート対応 △ 機能が限定的
ファイアウォール ◎ advfirewallで詳細設定 ◎ NetFirewallRuleコマンドレット
IP設定 ◎ 全バージョン対応 ◎ Get/Set-NetIPAddressで柔軟
エラーハンドリング ERRORLEVEL で判定 try/catch・$? で判定

古い環境との互換性を保ちたい場合や既存のバッチに組み込む場合はnetsh、Windows 10/11専用で構わない場合はPowerShellのネットワークコマンドレットを選ぶのがおすすめです。

よくある質問

Qnetshコマンドを実行するとエラーが出て設定が変わりません。
Aほぼすべての設定変更コマンドに管理者権限が必要です。バッチファイルを右クリック→「管理者として実行」してください。
Qインターフェース名が環境によって異なります。スクリプトに固定で書いて大丈夫ですか?
Anetsh interface show interfaceで確認した名前をそのまま変数に設定してください。環境ごとに名前が違う場合は、スクリプト冒頭にset ADAPTER=イーサネットのように変数で定義し、環境に応じて書き換える運用が管理しやすくなります。
QWiFiパスワード確認コマンドで「Key Content」が出ません。
A以下3つの原因が考えられます。①管理者権限がない→右クリックで「管理者として実行」。②オープンネットワーク(パスワードなし)→パスワードが存在しないため表示されない。③WPA2-Enterprise(証明書認証)→パスワードではなく証明書で認証するため表示されない。
Qネットワークリセット後に静的IPの設定が消えました。
Anetsh int ip resetはTCP/IP設定を完全に初期化するため静的IPも消えます。リセット前にnetsh int ip show config > backup.txtでバックアップし、再起動後に静的IP設定スクリプトを再実行してください。
Qファイアウォールルールを追加しましたが再起動後に消えました。
Anetsh advfirewallで追加したルールはレジストリに保存されるため通常は再起動後も保持されます。netsh advfirewall resetを実行したか、GPOによって上書きされた可能性があります。netsh advfirewall show allprofilesで現在の状態を確認してください。
Qnetsh winhttp set proxy を設定しましたがブラウザに反映されません。
Anetsh winhttpで設定するのはWinHTTPプロキシで、システムサービス向けです。ブラウザ(Chrome・Edge)はWinINETプロキシを参照するため、インターネットオプションやブラウザの設定画面から別途設定が必要です。

まとめ

netshの主要な使い方をおさらいします。

  • IP設定変更: netsh int ip set address / DHCPに戻す: set address dhcp
  • WiFiパスワード確認: netsh wlan show profile name="SSID" key=clear
  • ファイアウォールルール追加: netsh advfirewall firewall add rule
  • プロキシ設定: netsh winhttp set proxy / 解除: reset proxy
  • ネットワークリセット: netsh int ip reset + netsh winsock reset + 再起動
  • NICの有効化・無効化: netsh interface set interface "名前" enable/disable

ネットワーク設定の定型作業をバッチ化しておくと、環境切り替えや障害対応の時間を大幅に短縮できます。管理者権限が必要な操作が多いので、接続確認バッチと組み合わせて自動復旧の仕組みを整えておくと運用がスムーズになります。