PowerShell

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話のアイキャッチ

― 会社/自宅ネットワークをワンタッチ切り替え ―

ノートPCを職場と自宅のどちらでも使っていると、ネットワーク設定の切り替えが地味に面倒です。

  • 会社では固定IP必須+社内プロキシ必須
  • 自宅では固定IPまたはDHCP+プロキシ不要
  • さらに場所によって IP・DNS・WINS の設定値も違う…

こういう環境だと、毎回「ネットワークの詳細設定」を開いて手作業で変更しなければならず、結構なストレスになります。

そこで今回、メニューから選択するだけでネットワーク設定とプロキシ設定を一括切り替えできる PowerShell を開発しました。
本記事では、このスクリプトの構造や書き方を、実際のコードを交えながら紹介します。

スクリプト名は eth1-Switch-NetworkWithProxy.ps1としておりますので必要に応じてご変更ください。

PowerShell でバックアップファイルを月別フォルダに自動整理するスクリプトを作った話|ログ付き・削除処理ありアイキャッチ

PowerShell

2025/12/5

PowerShell でバックアップファイルを月別フォルダに自動整理するスクリプトを作った話|ログ付き・削除処理あり

はじめに WordPress のバックアップ運用では、BackWPup や UpdraftPlus などのプラグインが生成する ZIP ファイルが日々蓄積されていきます。しかし、そのまま放置しているとバックアップフォルダが膨れ上がり、どのファイルがいつのものなのか分かりづらくなる…という問題が発生します。 そこで今回は、バックアップファイルを月別フォルダに自動振り分けし、コピー後に元ファイルを削除、さらにログも月別で保管する PowerShell スクリプトを開発しました。 今回開発した PowerShe ...

ReadMore

デジカメで撮影した写真・動画を日付で自動コピーする PowerShell スクリプトを作った話アイキャッチ

PowerShell

2025/12/4

デジカメで撮影した写真・動画を日付で自動コピーする PowerShell スクリプトを作った話

はじめに という場面はよくあります。 しかし、手作業でファイルを探したり、種類ごとに仕分けしたりするのはかなり面倒です。 そこで今回、ユーザーが入力した日付以降のファイルだけをコピーする PowerShell スクリプトを作成しました。コピー先フォルダの作成や、ファイル名の重複回避にも対応しているため、バックアップや整理作業が一気に楽になります。 今回作ったスクリプトでできること この PowerShell では、次のような処理が自動で行えます。 ユーザーが入力した日付(YYYYMMDD形式)以降に作成さ ...

ReadMore

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話のアイキャッチ

PowerShell

2025/12/4

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話

― 会社/自宅ネットワークをワンタッチ切り替え ― ノートPCを職場と自宅のどちらでも使っていると、ネットワーク設定の切り替えが地味に面倒です。 会社では固定IP必須+社内プロキシ必須 自宅では固定IPまたはDHCP+プロキシ不要 さらに場所によって IP・DNS・WINS の設定値も違う… こういう環境だと、毎回「ネットワークの詳細設定」を開いて手作業で変更しなければならず、結構なストレスになります。 そこで今回、メニューから選択するだけでネットワーク設定とプロキシ設定を一括切り替えできる PowerS ...

ReadMore

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつきのアイキャッチ画像

PowerShell

2025/12/4

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつき

はじめに PowerShell のスクリプトを実行したいときに、「バッチファイルから起動したい」という場面は意外と多いです。特に、PowerShell を触らないユーザーにも簡単に使ってもらいたい場合は、ダブルクリックで実行できる .bat のほうが便利ですよね。 本記事では、バッチファイルから PowerShell を起動する基本の方法から、管理者権限を自動でチェックして昇格してくれる実践的なバッチコードまで詳しく解説します。 サンプルとして、eth1-Switch-NetworkWithProxy.p ...

ReadMore

PowerShellでHEICをJPGに一括変換するスクリプトのアイキャッチ

PowerShell

2025/12/4

【Windowsで簡単変換】PowerShellでHEICをJPGに一括変換するスクリプトを作ったので紹介します

はじめに iPhone で撮った写真は標準で HEIC(HEIF)形式になっています。ファイルサイズが小さくて便利なのですが、Windows の古いアプリやブログサービスによっては JPG の方が扱いやすいことがあります。 今回は、Windows に標準で入っている WIC(Windows Imaging Component)を使って HEIC → JPG へ変換する PowerShell スクリプトを作ったのでご紹介します。 フォルダ内の HEIC をまとめて JPEG 化 画質(Quality)を自由 ...

ReadMore

スクリプトの概要

このスクリプトは、PowerShell で以下の設定をボタン感覚で切り替えられるようにしたものです。

できること

  • 会社用ネットワーク(固定IP+DNS+WINS+プロキシON)
  • 自宅用ネットワーク(固定IP+プロキシOFF)
  • 自宅用ネットワーク(DHCP+プロキシOFF)
  • プロキシ設定のみ ON / OFF

メニュー操作のイメージ

IPアドレス切り替えPowerShell メニュー画面

スクリプトを実行すると次のようなメニューが表示されます。

===== ネットワーク / プロキシ切り替えメニュー =====
1. 会社用ノートPC有線(eth1)に切り替え
2. 自宅用ノートPC有線(eth1)に切り替え (固定 & プロキシ無効)
3. 自宅用ノートPC有線(eth1)に切り替え (自動 & プロキシ無効)
4. プロキシのみ ON
5. プロキシのみ OFF
Q. 終了

数字を押すだけで切り替え完了、というシンプルな操作性です。

動作環境と前提条件

✔ 対応OS

  • Windows 10 / 11

✔ 必要権限

ネットワーク設定変更(IPアドレス、DNS)は 管理者権限 が必須です。

✔ 事前に確認しておくこと

  • ネットワークインターフェース名(例:eth1
    Get-NetAdapternetsh 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
PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつき - くまyy

kumayy.com

ショートカット化

  1. デスクトップで右クリック → 新規 → ショートカット
  2. リンク先に上記コマンドを貼り付け
  3. ショートカットを右クリック → プロパティ
  4. 「詳細設定」 → 「管理者として実行」にチェック
  5. タスクバーやスタートにピン留め

これだけで、任意のタイミングでワンクリック切り替えができるようになります。

自分の環境向けにカスタマイズする方法

インターフェース名を変更したい場合

$interfaceName = "Ethernet"

などに書き換えるだけ。

会社用 IP/DNS を変更する場合

Set-CompanyNetwork の中を変更して OK。

メニューを追加したい場合

  • 任意の関数を追加
  • switch の項目を増やす

するだけで簡単に拡張できます。

トラブルシューティング

よくある問題と対処方法

症状原因対処
IPが切り替わらない管理者権限なしPowerShell を「管理者として実行」する
エラーが出るインターフェース名が違うGet-NetAdapter で確認
プロキシが効かないアプリ独自設定が優先Chrome/Edge の設定も確認

netsh のログを見たい場合

2>&1 | Out-Null を消せば画面に出力されるので、問題切り分けに役立ちます。

まとめ ― ネットワーク切り替えの手間は自動化できる

  • 会社 / 自宅のネットワーク設定をメニューから一括切り替え
  • プロキシON/OFFも同時に制御
  • メニュー形式なので操作が迷わない
  • 自分の環境に合わせて簡単にカスタマイズ可能

ノートPCを持ち歩いて使う人ほど効果の大きいスクリプトだと思います。

PowerShell はネットワーク・レジストリ設定を自在に扱えるため、こうした “日常のちょっとした面倒” を自動化するのが得意なツールです。
ぜひ自分の環境に合わせてカスタマイズして使ってみてください。

PowerShell でバックアップファイルを月別フォルダに自動整理するスクリプトを作った話|ログ付き・削除処理ありアイキャッチ

PowerShell

2025/12/5

PowerShell でバックアップファイルを月別フォルダに自動整理するスクリプトを作った話|ログ付き・削除処理あり

はじめに WordPress のバックアップ運用では、BackWPup や UpdraftPlus などのプラグインが生成する ZIP ファイルが日々蓄積されていきます。しかし、そのまま放置しているとバックアップフォルダが膨れ上がり、どのファイルがいつのものなのか分かりづらくなる…という問題が発生します。 そこで今回は、バックアップファイルを月別フォルダに自動振り分けし、コピー後に元ファイルを削除、さらにログも月別で保管する PowerShell スクリプトを開発しました。 今回開発した PowerShe ...

ReadMore

デジカメで撮影した写真・動画を日付で自動コピーする PowerShell スクリプトを作った話アイキャッチ

PowerShell

2025/12/4

デジカメで撮影した写真・動画を日付で自動コピーする PowerShell スクリプトを作った話

はじめに という場面はよくあります。 しかし、手作業でファイルを探したり、種類ごとに仕分けしたりするのはかなり面倒です。 そこで今回、ユーザーが入力した日付以降のファイルだけをコピーする PowerShell スクリプトを作成しました。コピー先フォルダの作成や、ファイル名の重複回避にも対応しているため、バックアップや整理作業が一気に楽になります。 今回作ったスクリプトでできること この PowerShell では、次のような処理が自動で行えます。 ユーザーが入力した日付(YYYYMMDD形式)以降に作成さ ...

ReadMore

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話のアイキャッチ

PowerShell

2025/12/4

【PowerShell】メニューからIPアドレスとプロキシ設定を切り替えるスクリプトを作った話

― 会社/自宅ネットワークをワンタッチ切り替え ― ノートPCを職場と自宅のどちらでも使っていると、ネットワーク設定の切り替えが地味に面倒です。 会社では固定IP必須+社内プロキシ必須 自宅では固定IPまたはDHCP+プロキシ不要 さらに場所によって IP・DNS・WINS の設定値も違う… こういう環境だと、毎回「ネットワークの詳細設定」を開いて手作業で変更しなければならず、結構なストレスになります。 そこで今回、メニューから選択するだけでネットワーク設定とプロキシ設定を一括切り替えできる PowerS ...

ReadMore

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつきのアイキャッチ画像

PowerShell

2025/12/4

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつき

はじめに PowerShell のスクリプトを実行したいときに、「バッチファイルから起動したい」という場面は意外と多いです。特に、PowerShell を触らないユーザーにも簡単に使ってもらいたい場合は、ダブルクリックで実行できる .bat のほうが便利ですよね。 本記事では、バッチファイルから PowerShell を起動する基本の方法から、管理者権限を自動でチェックして昇格してくれる実践的なバッチコードまで詳しく解説します。 サンプルとして、eth1-Switch-NetworkWithProxy.p ...

ReadMore

PowerShellでHEICをJPGに一括変換するスクリプトのアイキャッチ

PowerShell

2025/12/4

【Windowsで簡単変換】PowerShellでHEICをJPGに一括変換するスクリプトを作ったので紹介します

はじめに iPhone で撮った写真は標準で HEIC(HEIF)形式になっています。ファイルサイズが小さくて便利なのですが、Windows の古いアプリやブログサービスによっては JPG の方が扱いやすいことがあります。 今回は、Windows に標準で入っている WIC(Windows Imaging Component)を使って HEIC → JPG へ変換する PowerShell スクリプトを作ったのでご紹介します。 フォルダ内の HEIC をまとめて JPEG 化 画質(Quality)を自由 ...

ReadMore

【改訂新版】Windows PowerShell ポケットリファレンス商品画像

【改訂新版】 Windows PowerShell ポケットリファレンス

PowerShell コマンドを “必要なときにすぐ引ける” 実用リファレンス。
日常の管理作業から自動化まで、ポイントを押さえたコンパクトな解説が魅力。
手元に置いておくとスクリプト作成のスピードが一気に上がります。

おすすめポイント:

  • コマンドや構文がサッと探せて実務で便利
  • 細かい機能やオプションまで網羅されている
  • スクリプト作成中の「詰まり」をすぐ解消できる

Rakuten

Amazon

Yahoo!ショッピング

  • この記事を書いた人
  • 最新記事

かじ

くまyyの管理人:かじ。 社内SEとして13年勤務、システム企画・開発をしているIT屋さん。 ガジェット好きなので最新ガジェットを追いかけるのが好き。 プログラミングなど自分の知識と経験をいろんな人に役立ってもらえるように記事を更新します!

-PowerShell
-,