― 会社/自宅ネットワークをワンタッチ切り替え ―
ノートPCを職場と自宅のどちらでも使っていると、ネットワーク設定の切り替えが地味に面倒です。
- 会社では固定IP必須+社内プロキシ必須
- 自宅では固定IPまたはDHCP+プロキシ不要
- さらに場所によって IP・DNS・WINS の設定値も違う…
こういう環境だと、毎回「ネットワークの詳細設定」を開いて手作業で変更しなければならず、結構なストレスになります。
そこで今回、メニューから選択するだけでネットワーク設定とプロキシ設定を一括切り替えできる PowerShell を開発しました。
本記事では、このスクリプトの構造や書き方を、実際のコードを交えながら紹介します。
スクリプト名は eth1-Switch-NetworkWithProxy.ps1としておりますので必要に応じてご変更ください。
スクリプトの概要
このスクリプトは、PowerShell で以下の設定をボタン感覚で切り替えられるようにしたものです。
できること
- 会社用ネットワーク(固定IP+DNS+WINS+プロキシON)
- 自宅用ネットワーク(固定IP+プロキシOFF)
- 自宅用ネットワーク(DHCP+プロキシOFF)
- プロキシ設定のみ ON / OFF
メニュー操作のイメージ

スクリプトを実行すると次のようなメニューが表示されます。
===== ネットワーク / プロキシ切り替えメニュー ===== 1. 会社用ノートPC有線(eth1)に切り替え 2. 自宅用ノートPC有線(eth1)に切り替え (固定 & プロキシ無効) 3. 自宅用ノートPC有線(eth1)に切り替え (自動 & プロキシ無効) 4. プロキシのみ ON 5. プロキシのみ OFF Q. 終了
数字を押すだけで切り替え完了、というシンプルな操作性です。
動作環境と前提条件
✔ 対応OS
- Windows 10 / 11
✔ 必要権限
ネットワーク設定変更(IPアドレス、DNS)は 管理者権限 が必須です。
✔ 事前に確認しておくこと
- ネットワークインターフェース名(例:
eth1)
→Get-NetAdapterやnetsh interface show interfaceで確認できます - 会社・自宅のネットワーク設定(IP、DNS、ゲートウェイなど)
切り替えスクリプトコード
# インターフェース名(必要に応じて変更)
$interfaceName = "eth1"
function Set-CompanyNetwork {
Write-Host "--- 会社用ネットワークを設定中 ---"
try {
netsh interface ip set address name="$interfaceName" static 10.1.1.1 255.255.255.0 10.1.1.254 2>&1 | Out-Null
netsh interface ip set dns name="$interfaceName" static 10.10.10.1 2>&1 | Out-Null
Start-Sleep -Seconds 1
netsh interface ip add dns name="$interfaceName" 10.10.10.2 index=2 2>&1 | Out-Null
Start-Sleep -Seconds 1
netsh interface ip add dns name="$interfaceName" 10.10.10.3 index=3 2>&1 | Out-Null
Start-Sleep -Seconds 1
netsh interface ip add dns name="$interfaceName" 10.10.10.4 index=4 2>&1 | Out-Null
netsh interface ip set winsservers name="$interfaceName" source=static addr=10.10.10.1 2>&1 | Out-Null
netsh interface ip add winsservers name="$interfaceName" addr=10.10.10.2 index=2 2>&1 | Out-Null
netsh interface ip add winsservers name="$interfaceName" addr=10.10.10.3 index=3 2>&1 | Out-Null
netsh interface ip add winsservers name="$interfaceName" addr=10.10.10.4 index=4 2>&1 | Out-Null
Set-ProxyOn
Write-Host "会社用設定が完了しました。"
}
catch {
Write-Host "エラーが発生しました: $_" -ForegroundColor Red
}
}
function Set-HomeNetwork {
Write-Host "--- 自宅用ネットワーク(固定)を設定中 ---"
try {
netsh interface ip set address name="$interfaceName" static 192.168.1.1 255.255.255.0 192.168.1.254 2>&1 | Out-Null
netsh interface ip set dns name="$interfaceName" static 192.168.1.254 2>&1 | Out-Null
Set-ProxyOff
Write-Host "自宅用設定が完了しました。"
}
catch {
Write-Host "エラーが発生しました: $_" -ForegroundColor Red
}
}
function Set-HomeNetworkDhcp {
Write-Host "--- 自宅用ネットワーク(DHCP)を設定中 ---"
try {
netsh interface ip set address name="$interfaceName" source=dhcp 2>&1 | Out-Null
netsh interface ip set dns name="$interfaceName" source=dhcp 2>&1 | Out-Null
Set-ProxyOff
Write-Host "自宅用ネットワーク(DHCP)設定が完了しました。"
}
catch {
Write-Host "エラーが発生しました: $_" -ForegroundColor Red
}
}
function Set-ProxyOn {
Write-Host "--- プロキシを有効に設定中 ---"
$proxyServer = "proxy.example.com:8080"
$proxyOverride = "outlook.office.com;outlook.office365.com;autodiscover-*.outlook.com;*.protection.outlook.com;<local>"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -Value $proxyServer
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyOverride -Value $proxyOverride
Refresh-Settings
Write-Host "プロキシが有効になりました。"
}
function Set-ProxyOff {
Write-Host "--- プロキシを無効に設定中 ---"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 0
Refresh-Settings
Write-Host "プロキシが無効になりました。"
}
function Refresh-Settings {
$signature = @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd, uint Msg, IntPtr wParam, string lParam,
uint fuFlags, uint uTimeout, out IntPtr lpdwResult);
"@
Add-Type -MemberDefinition $signature -Name "Win32SendMessageTimeout" -Namespace Win32
$result = [IntPtr]::Zero
[Win32.Win32SendMessageTimeout]::SendMessageTimeout(
[IntPtr]::Zero, 0x1A, [IntPtr]::Zero, "Environment", 0, 1000, [ref]$result
) | Out-Null
}
function Show-Menu {
Clear-Host
Write-Host "===== ネットワーク / プロキシ切り替えメニュー ====="
Write-Host "1. 会社用ノートPC有線(eth1)に切り替え"
Write-Host "2. 自宅用ノートPC有線(eth1)に切り替え (固定 & プロキシ無効)"
Write-Host "3. 自宅用ノートPC有線(eth1)に切り替え (自動 & プロキシ無効)"
Write-Host "4. プロキシのみ ON"
Write-Host "5. プロキシのみ OFF"
Write-Host "Q. 終了"
}
do {
Show-Menu
$choice = Read-Host "選択肢を入力してください (1/2/3/4/5/Q)"
switch ($choice) {
"1" { Set-CompanyNetwork }
"2" { Set-HomeNetwork }
"3" { Set-HomeNetworkDhcp }
"4" { Set-ProxyOn }
"5" { Set-ProxyOff }
"Q" { exit }
default { Write-Host "無効な選択です。1~5 または Q を入力してください。" -ForegroundColor Yellow }
}
if ($choice -notin @("Q", "q")) {
Pause
}
} while ($true)
IPアドレス・プロキシはダミー値でサンプル化してあります。
スクリプトの構造解説
ここからは、スクリプトの主要部分ごとに動作を解説していきます。
インターフェース名の指定
$interfaceName = "eth1"
ここを変更するだけで別のNIC名に対応できます。
ノートPCによっては「Ethernet」「イーサネット」など別名の場合もあるので環境に合わせて変更してください。
メニュー表示と処理ループ
function Show-Menu { ... }
do {
Show-Menu
$choice = Read-Host "選択肢を入力してください (1/2/3/4/5/Q)"
switch ($choice) {
"1" { Set-CompanyNetwork }
"2" { Set-HomeNetwork }
"3" { Set-HomeNetworkDhcp }
"4" { Set-ProxyOn }
"5" { Set-ProxyOff }
"Q" { exit }
default { Write-Host "無効な選択です。" -ForegroundColor Yellow }
}
if ($choice -notin @("Q", "q")) { Pause }
} while ($true)
Show-Menuでメニューを分離 → コードが読みやすいswitchでメニュー番号に応じて処理を呼び出すPauseで画面が一瞬で閉じないように配慮
会社用ネットワーク設定:Set-CompanyNetwork
netsh interface ip set address name="eth1" static 10.1.1.1 255.255.255.0 10.1.1.254 netsh interface ip set dns name="eth1" static 10.10.10.1 netsh interface ip add dns name="eth1" 10.10.10.2 index=2 ... netsh interface ip set winsservers name="eth1" static 10.10.10.1 ...
- 固定IPの設定
- DNSを複数登録
- WINSサーバを登録
- プロキシ設定を有効化(
Set-ProxyOn)
WINS を使う企業は減ってきていますが、まだ必須の環境もあるため記載していますので不要であれば削除してください。
処理は try / catch で囲んであり、エラーが出た場合も画面にシンプルに表示されます。
自宅用ネットワーク(固定):Set-HomeNetwork
netsh interface ip set address name="eth1" static 192.168.1.1 255.255.255.0 192.168.1.254 netsh interface ip set dns name="eth1" static 192.168.1.254
- 自宅LANの固定IPに変更
- DNS はルーター(192.168.1.254)に一任
- プロキシは OFF に切り替え(
Set-ProxyOff)
自宅用ネットワーク(DHCP):Set-HomeNetworkDhcp
netsh interface ip set address name="eth1" source=dhcp netsh interface ip set dns name="eth1" source=dhcp
固定IPを使わない家庭ではこちらが一般的ですので、DHCP による自動設定へ戻すだけのシンプルな処理です。
もちろん、この関数もプロキシ OFF を呼び出します。
プロキシON/OFF処理
■ プロキシON
Set-ItemProperty ... ProxyEnable -Value 1 Set-ItemProperty ... ProxyServer -Value "proxy.example.com:8080" Set-ItemProperty ... ProxyOverride -Value "outlook.office.com;..."
■ プロキシOFF
Set-ItemProperty ... ProxyEnable -Value 0
Chrome / Edge など多くのブラウザはこの設定を参照するので、Windows で統一したプロキシ管理ができます。
変更を即時反映:Refresh-Settings
Windows はレジストリを変更しただけでは設定を即時反映しません。
そこで、以下のように SendMessageTimeout を呼んで更新通知を送っています。
[Win32.Win32SendMessageTimeout]::SendMessageTimeout(
[IntPtr]::Zero, 0x1A, [IntPtr]::Zero, "Environment", 0, 1000, [ref]$result
)
この一手間を入れることで、ブラウザやアプリがすぐに新しいプロキシ設定を認識します。
スクリプトの実行方法
手動で実行する場合
powershell.exe -ExecutionPolicy Bypass -File "C:\tools\ps1\eth1-Switch-NetworkWithProxy.ps1"
バッチファイルから起動
他のPCにも展開する場合はバッチファイルから起動するようにすると楽です。
-
-
PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつき - くまyy
kumayy.com
ショートカット化
- デスクトップで右クリック → 新規 → ショートカット
- リンク先に上記コマンドを貼り付け
- ショートカットを右クリック → プロパティ
- 「詳細設定」 → 「管理者として実行」にチェック
- タスクバーやスタートにピン留め
これだけで、任意のタイミングでワンクリック切り替えができるようになります。
自分の環境向けにカスタマイズする方法
インターフェース名を変更したい場合
$interfaceName = "Ethernet"
などに書き換えるだけ。
会社用 IP/DNS を変更する場合
Set-CompanyNetwork の中を変更して OK。
メニューを追加したい場合
- 任意の関数を追加
switchの項目を増やす
するだけで簡単に拡張できます。
トラブルシューティング
よくある問題と対処方法
| 症状 | 原因 | 対処 |
|---|---|---|
| IPが切り替わらない | 管理者権限なし | PowerShell を「管理者として実行」する |
| エラーが出る | インターフェース名が違う | Get-NetAdapter で確認 |
| プロキシが効かない | アプリ独自設定が優先 | Chrome/Edge の設定も確認 |
netsh のログを見たい場合
2>&1 | Out-Null を消せば画面に出力されるので、問題切り分けに役立ちます。
まとめ ― ネットワーク切り替えの手間は自動化できる
- 会社 / 自宅のネットワーク設定をメニューから一括切り替え
- プロキシON/OFFも同時に制御
- メニュー形式なので操作が迷わない
- 自分の環境に合わせて簡単にカスタマイズ可能
ノートPCを持ち歩いて使う人ほど効果の大きいスクリプトだと思います。
PowerShell はネットワーク・レジストリ設定を自在に扱えるため、こうした “日常のちょっとした面倒” を自動化するのが得意なツールです。
ぜひ自分の環境に合わせてカスタマイズして使ってみてください。

【改訂新版】 Windows PowerShell ポケットリファレンス
PowerShell コマンドを “必要なときにすぐ引ける” 実用リファレンス。
日常の管理作業から自動化まで、ポイントを押さえたコンパクトな解説が魅力。
手元に置いておくとスクリプト作成のスピードが一気に上がります。
おすすめポイント:
- コマンドや構文がサッと探せて実務で便利
- 細かい機能やオプションまで網羅されている
- スクリプト作成中の「詰まり」をすぐ解消できる