Pocket

先日Linux(というか、CentOS)の静的IPアドレス設定スクリプトについて記述したので、今回はWindowsの設定バッチについて記述する。

おおまかなイメージとしてはLinux版と同一なんだけど、Windowsの場合で厄介なのがsshで接続出来ないためPStoolsを有効化出来ない環境では、リモートデスクトップでログインしてコマンドを実行させる必要があるということ。
いちいちリモートデスクトップで接続するのは面倒なので、これはどうにか出来ないかなぁ…

「host.list」についてはLinux版のものを使いまわす事ができるのでここでは省略。
batファイルの場合は変数の扱い方がシェルスクリプトよりも悪いので、ここでは一時的なワークファイルを作成する事で対応している。

Sponsored Links

●setip.bat

@echo off
 
rem === set value start ==============================================
  set NIC0="ローカル エリア接続"
  set NIC0="ローカル エリア接続 2"
  set WORK01=Work01.txt
  set WORK02=Work02.txt
  set WORK03=Work03.txt
rem === set value end ================================================
 
rem === initial value start ==========================================
  set GATEWAY=
  set PREFIX=
 
  set NIC0ADDR=
  set NIC0MASK=
 
  set NIC1ADDR=
  set NIC1MASK=
rem === initial value end ============================================
 
rem === set Host Name start ==========================================
  wmic ComputerSystem WHERE name="%computername%" Call Rename name="%1"
rem === set Host Name end ============================================
 
rem === set IP Addr Start ============================================
  type host.list | find "%1" > %WORK01%
  type %WORK01% | find /v /c "" > %WORK02%
  for /f "tokens=1" %%i in (%WORK02%) do @SET NUM=%%i
  if %NUM% == 0 goto End
 
  rem === set Gateway Start =====================================
  for /f "tokens=2 delims=," %%i in (%WORK01%) do echo %%i > %WORK02%
  for /f "tokens=1 delims=/" %%i in (%WORK02%) do @SET GATEWAY=%%i
  rem === set Gateway End =======================================
 
  rem === set NIC0 IP Addr Start =====================================
  for /f "tokens=3 delims=," %%i in (%WORK01%) do echo %%i > %WORK02%
  for /f "tokens=1 delims=/" %%i in (%WORK02%) do @SET NIC0ADDR=%%i
  set PREFIX=
  for /f "tokens=2 delims=/" %%i in (%WORK02%) do @SET PREFIX=%%i
  set NIC0MASK=
  Call :GetSubnetMask %PREFIX%
   
  echo netsh interface ipv4 set address "%NIC0%" static %NIC0ADDR% %NIC0MASK=% %GATEWAY%
  rem === set NIC0 IP Addr End =======================================
 
  rem === set NIC1 IP Addr Start =====================================
  for /f "tokens=4 delims=," %%i in (%WORK01%) do echo %%i > %WORK02%
  for /f "tokens=1 delims=/" %%i in (%WORK02%) do @SET NIC1ADDR=%%i
  set PREFIX=
  for /f "tokens=2 delims=/" %%i in (%WORK02%) do @SET PREFIX=%%i
  set NIC1MASK=
  Call :GetSubnetMask %PREFIX%
   
  echo netsh interface ipv4 set address "%NIC1%" static %NIC1ADDR% %NIC1MASK=%
  rem === set NIC1 IP Addr Start =====================================
 
rem === set IP Addr End ==============================================
 
goto End
 
rem ==================================================================
:GetSubnetMask
    if /i %PREFIX% == 1 @SET NETMASK=128.0.0.0
    if /i %PREFIX% == 2 @SET NETMASK=192.0.0.0
    if /i %PREFIX% == 3 @SET NETMASK=224.0.0.0
    if /i %PREFIX% == 4 @SET NETMASK=240.0.0.0
    if /i %PREFIX% == 5 @SET NETMASK=248.0.0.0
    if /i %PREFIX% == 6 @SET NETMASK=252.0.0.0
    if /i %PREFIX% == 7 @SET NETMASK=254.0.0.0
    if /i %PREFIX% == 8 @SET NETMASK=255.0.0.0
    if /i %PREFIX% == 9 @SET NETMASK=255.128.0.0
    if /i %PREFIX% == 10 @SET NETMASK=255.192.0.0
    if /i %PREFIX% == 11 @SET NETMASK=255.224.0.0
    if /i %PREFIX% == 12 @SET NETMASK=255.240.0.0
    if /i %PREFIX% == 13 @SET NETMASK=255.248.0.0
    if /i %PREFIX% == 14 @SET NETMASK=255.252.0.0
    if /i %PREFIX% == 15 @SET NETMASK=255.254.0.0
    if /i %PREFIX% == 16 @SET NETMASK=255.255.0.0
    if /i %PREFIX% == 17 @SET NETMASK=255.255.128.0
    if /i %PREFIX% == 18 @SET NETMASK=255.255.192.0
    if /i %PREFIX% == 19 @SET NETMASK=255.255.224.0
    if /i %PREFIX% == 20 @SET NETMASK=255.255.240.0
    if /i %PREFIX% == 21 @SET NETMASK=255.255.248.0
    if /i %PREFIX% == 22 @SET NETMASK=255.255.252.0
    if /i %PREFIX% == 23 @SET NETMASK=255.255.254.0
    if /i %PREFIX% == 24 @SET NETMASK=255.255.255.0
    if /i %PREFIX% == 25 @SET NETMASK=255.255.255.128
    if /i %PREFIX% == 26 @SET NETMASK=255.255.255.192
    if /i %PREFIX% == 27 @SET NETMASK=255.255.255.224
    if /i %PREFIX% == 28 @SET NETMASK=255.255.255.240
    if /i %PREFIX% == 29 @SET NETMASK=255.255.255.248
    if /i %PREFIX% == 30 @SET NETMASK=255.255.255.252
    if /i %PREFIX% == 31 @SET NETMASK=255.255.255.254
    if /i %PREFIX% == 32 @SET NETMASK=255.255.255.255
 
    exit /b 0
 
 
:End
    echo "Please Reboot Computer"
rem ==================================================================

これに関しても、コマンドの後ろに設定したいホスト名を記述して設定する。
事前に筐体のシリアルコードを把握していれば、「host.list」の検索キーにUUIDを指定し、バッチ内で「wmic csproduct get uuid」コマンドで照らし合わせを行わせることでより自動化することができるかも…

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。