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」など異なるため、先に確認しましょう。
@echo off :: 全インターフェース一覧(名前・状態・タイプを表示) netsh interface show interface :: --- 出力例 --- :: 管理状態 状態 タイプ インターフェイス名 :: enabled Connected Dedicated イーサネット :: enabled Connected Dedicated Wi-Fi :: enabled Disconnected Dedicated イーサネット 2
@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設定を確認する
@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アドレスを設定する
@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に切り替える
@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を一時的に変更したい場合に使います。
@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%"
| サービス | プライマリ | セカンダリ |
|---|---|---|
| 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のパスワードをバッチから確認できます。
@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のパスワードを一括取得する
@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
)
)
- 管理者権限なし → バッチを「管理者として実行」する
- オープンネットワーク(パスワードなし)→ パスワードが存在しないため表示されない
- WPA2-Enterprise(証明書認証)→ パスワードではなく証明書で認証するため表示されない
WiFi接続・切断・削除
@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設定を引き継ぐパターンです。
@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
)
現在の接続状態を確認する
@echo off :: 接続中のWiFi情報を表示 netsh wlan show interfaces :: 周辺のSSIDスキャン結果を表示 netsh wlan show networks mode=bssid :: ドライバー情報を表示 netsh wlan show drivers
Windowsファイアウォール(netsh advfirewall)
ファイアウォールの状態確認
@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"
ルールの追加・削除・変更
@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"
ファイアウォールルールの冪等設定
環境構築スクリプトでは「既存ルールを先に削除→追加」の順で冪等に設定します。
@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(netsh winhttp) | WinINET(IE/Edge設定) | |
|---|---|---|
| 使用主体 | システムサービス・バックグラウンドアプリ・Windows Update | ブラウザ・ユーザーアプリ |
| 設定方法 | netsh winhttp set proxy | インターネットオプション / レジストリ |
| スコープ | システム全体 | ログインユーザーごと |
社内環境では両方の設定が必要なことがあります。
@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証明書をポートにバインドする操作が必要になることがあります。
@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キャッシュをクリア | 不要 |
@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 "ネットワークリセット後の再起動"
netsh int ip resetを実行するとTCP/IP設定が初期化されるため、静的IPアドレスの設定も消えます。実行前にnetsh int ip show config > backup.txtで現在の設定をバックアップしておきましょう。実践パターン
パターン1: 環境切り替えツール(社内・現場・自宅)
@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も組み合わせてポート状態も記録します。
@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と組み合わせて週次で実行し、想定外のルールが追加されていないかを監視します。
@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アドレス再取得→ネットワークスタックリセットと段階的に復旧を試みます。詳しい監視ループの実装はネットワーク接続の継続監視・自動復旧バッチも参照してください。
@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のネットワークコマンドレットを選ぶのがおすすめです。
よくある質問
netsh interface show interfaceで確認した名前をそのまま変数に設定してください。環境ごとに名前が違う場合は、スクリプト冒頭にset ADAPTER=イーサネットのように変数で定義し、環境に応じて書き換える運用が管理しやすくなります。netsh int ip resetはTCP/IP設定を完全に初期化するため静的IPも消えます。リセット前にnetsh int ip show config > backup.txtでバックアップし、再起動後に静的IP設定スクリプトを再実行してください。netsh advfirewallで追加したルールはレジストリに保存されるため通常は再起動後も保持されます。netsh advfirewall resetを実行したか、GPOによって上書きされた可能性があります。netsh advfirewall show allprofilesで現在の状態を確認してください。netsh 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
ネットワーク設定の定型作業をバッチ化しておくと、環境切り替えや障害対応の時間を大幅に短縮できます。管理者権限が必要な操作が多いので、接続確認バッチと組み合わせて自動復旧の仕組みを整えておくと運用がスムーズになります。

