コンテンツへスキップ

Windows端末のIP アドレスをコマンドラインとか、バッチ処理で設定する。

IP をコマンドで変更する手順をコパイロットさんに聞いてみました。
さらにバッチ処理するには?も聞いて検証。
最終的にちゃんと使えてるところがコパイロットさんの凄いところだと常々思います。(怖い子だよ!)

IPアドレスをコマンドラインとか、バッチ処理で設定する。

IP アドレスをコマンドプロンプトで変更する。

コマンドラインからIPアドレスを変更するには、以下の手順を参考にしてください。ここでは、Windowsのコマンドプロンプトを使用した方法を紹介します。

1. コマンドプロンプトを管理者権限で起動する

  1. スタートメニューを開き、「cmd」と入力して検索します。
  2. 「コマンドプロンプト」を右クリックし、「管理者として実行」を選択します。

2. IPアドレスを設定する

  1. コマンドプロンプトで以下のコマンドを入力します。
netsh interface ip set address "インターフェース名" static IPアドレス サブネットマスク GW メトリック

例:netsh interface ip set address "イーサネット" static 10.0.0.9 255.0.0.0 10.0.0.1 2

ゲートウェイの後ろについているのは、メトリックらしい。

3. DNSサーバーを設定する

DNS もコマンドプロンプトで変更できる。
代々の方は

  1. コマンドプロンプトで以下のコマンドを入力します。
netsh interface ip set dns "インターフェース名" static DNSサーバーIPアドレス primary

例: netsh interface ip set dns "イーサネット" static 8.8.8.8 primary

コマンドのヘルプから、代替の方の設定がいまいちわからなかったので、どうするのか聞いたところ、
違うコマンドと使うっぽい。(今回は試してないです。そのうちに。。。)

batch:
netsh interface ipv4 add dns name="インターフェース名" addr="代替DNSサーバーIPアドレス" index=2 validate=no

powershell:
Set-DnsClientServerAddress -InterfaceAlias "インターフェース名" -ServerAddresses "優先DNSサーバーIPアドレス","代替DNSサーバーIPアドレス"

4. DHCPに戻す(必要に応じて)

IP アドレスなどをDHCP に戻す。

以下のコマンドを入力します。

netsh interface ip set address "インターフェース名" dhcp
DNSサーバーをDHCPに戻す。(set の対象が異なる。)

以下のコマンドを入力します。

netsh interface ip set dns "インターフェース名" dhcp

バッチ処理する。管理者権限取得も込みで。

上記でやりたいことはできるのは確認できました。
コマンド2つあるし、今後のことも考えて、バッチ処理する感じにしたい。
管理者としてバッチを実行するのはいいけど、やや面倒なのでダブルクリックで完結したい。
(どっちにしてもユーザーコントロールなんちゃらを聞かれるので、うっかりミス避けみたいな感も否めませんが、右クリックメニューから実行するより、ダブルクリックの方が楽。)
というフェーズです。

バッチファイル内で管理者権限を取得するためには、以下のスクリプトを使用して、バッチファイル自体を管理者権限で再起動する方法があります。

1. 管理者権限で実行するスクリプト

結局ユーザーなんちゃら(変更を許可しますか?のあれ)の画面が出るので、
パスワードの入力とか場合によって必要。

batch

@echo off
:: 管理者権限が必要なコマンド
echo 管理者権限が必要なコマンドを実行中...

:: 管理者権限で再実行するスクリプト
:checkPrivileges
net session >nul 2>&1
if %errorLevel% == 0 (
    goto gotPrivileges
) else (
    goto getPrivileges
)

:getPrivileges
if "%1"=="%~0" (echo 管理者権限で実行できませんでした。 & pause & exit /B)
echo 管理者権限で再実行しています...
powershell -Command "Start-Process '%~0' -ArgumentList '%~1' -Verb runAs"
exit /B

:gotPrivileges
shift
:: ここに管理者権限が必要なコマンドを追加します
echo 管理者権限で実行中...
pause

2. バッチファイルの説明

このスクリプトは、バッチファイルが管理者権限で実行されているかどうかをチェックし、管理者権限がない場合は、Powershellコマンドを使用して管理者権限で再起動します。

  • :checkPrivileges: 管理者権限があるかどうかを確認します。
  • :getPrivileges: 管理者権限がない場合、Powershellを使ってバッチファイルを管理者権限で再起動します。
  • :gotPrivileges: 管理者権限がある場合、ここに管理者権限が必要なコマンドを追加します。

このスクリプトを使用することで、バッチファイル内で管理者権限を取得し、必要なコマンドを実行することができます。

管理者権限がない場合、再起動してループする仕組み。
powershell の件がうまくいかない場合、フルパスにするといいみたいです。
(ほかにも引数がちゃんと渡せてないんじゃないかとかいう場合もあるかもだそうです。-ArgumentListを消すと動くなら、引数関係の問題かなって思います。)

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command "Start-Process '%~0' -ArgumentList '%~f0 %*' -Verb runAs"
exit /B

それぞれのPC ごとに作るのも面倒なので、

unimoniのアバター

pc 名で条件分岐してIPアドレスを割り当てるようなテーブルもつけたい。
IPアドレスを変数にして、つかいたい

こんな感じな。

:: PC名に基づいた条件分岐と変数設定
set PC_NAME=%COMPUTERNAME%
echo PC名: %PC_NAME%

if /I "%PC_NAME%"=="PC1" (
    :: IPアドレス変数を設定
    set IP_ADDRESS=192.168.1.101
) else if /I "%PC_NAME%"=="PC2" (
    set IP_ADDRESS=192.168.1.102
) else if /I "%PC_NAME%"=="PC3" (
    set IP_ADDRESS=192.168.1.103
) else (
    echo 未知のPC名です。デフォルトの設定を適用します。
    set IP_ADDRESS=192.168.1.100
)

:: 設定された変数を使用してIPアドレスを設定
netsh interface ip set address "Ethernet" static %IP_ADDRESS% 255.255.255.0 192.168.1.1
netsh interface ip set dns "Ethernet" static 8.8.8.8 primary

echo IPアドレスの設定が完了しました。IPアドレス: %IP_ADDRESS%

素晴らしいです。イメージどおりっす。
最後のデフォルト適用の件は想像を超えてきてます。
(実際には、処理をスキップするように設定しました。)

参考

最終的にできたバッチファイル

文字化けしてエラー起こすので、ANSI 形式で保存してます。

windows 11 でもOK。


@echo off
:: 管理者権限が必要なコマンド
echo 管理者権限が必要なコマンドを実行中...

:: 管理者権限で再実行するスクリプト
:checkPrivileges
net session >nul 2>&1
if %errorLevel% == 0 (
    goto gotPrivileges
) else (
    goto getPrivileges
)

:getPrivileges
if "%1"=="%~0" (echo 管理者権限で実行できませんでした。 & pause & exit /B)
echo 管理者権限で再実行しています...
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command "Start-Process '%~0' -ArgumentList '%~f0 %*' -Verb runAs"
exit /B
pause

:gotPrivileges
shift
:: PC名に基づいた条件分岐と変数設定
set PC_NAME=%COMPUTERNAME%
echo PC名: %PC_NAME%

if /I "%PC_NAME%"=="pc1" (
    :: IPアドレス変数を設定
    set IP_ADDRESS=192.168.1.101
	
) else if /I "%PC_NAME%"=="pc2" (
    set IP_ADDRESS=192.168.1.102
	
) else if /I "%PC_NAME%"=="pc3" (
    set IP_ADDRESS=192.168.1.103

) else (
    echo 未知のPC名です。デフォルトの設定を適用します。
    goto noprocess
)

echo IP-Addres: %IP_ADDRESS%
pause

echo 管理者権限で実行中...
netsh interface ip set address "イーサネット" static %IP_ADDRESS% 255.255.255.0 192.168.1.1
netsh interface ip set dns "イーサネット" static 8.8.8.8 primary

:noprocess
echo 設定後のIPアドレスを確認してください...
ipconfig /all

pause

ネットワークアダプタ設定画面の呼び出し

非アクティブなアダプタのIPだと、ipconfig では確認できないから、
IPV4 のプロパティも一緒に開きたかった。

残念ながらインターネットプロトコル設定画面までの呼び出しコマンドはなさそうです。
あったとしてもアダプタ名の指定は要るだろうから、まあ、この辺りでよろしいかと。

cmd:
control ncpa.cpl

ps:
Start-Process "ncpa.cpl"

IP アドレス変更コマンドのソースサイト

https://tsuredurediary.com/archives/ip-address-change.html

(Visited 25 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です