昨日、ipmitoolからのGUID取得方法について記述したので、今回はそのスクリプトの改良版。
ホスト名、IPアドレス自動取得スクリプトと同様に、外部ファイルからipmiのIPアドレス、ユーザ名、パスワードを取得させ、IPアドレス別に一覧化させるというもの。
リストの読込みは引数で行わせる。

1.外部ファイル

まずは外部ファイル「ipmi.list」から。名前は任意なので適当に。
今回は、Fujitsu Primergy RX100の初期設定(IPアドレスはDCHP)の状態でリストを作成している。

●ipmi.list

#ipaddr,user,pass
192.168.0.206,admin,admin
192.168.0.111,admin,password

2.Linux

LinuxでのUUID取得スクリプトは以下。
引数にはファイルの場所を渡してもらいたい。

#!/bin/sh
IPMI_LIST=$1
LIST=$(cd $(dirname "$IPMI_LIST") && pwd)/$(basename "$IPMI_LIST")

cat $LIST |
while read LINE ; do
    if [[ $LINE =~ (^#|^ *$) ]] ;then
      echo "IPAddress,GUID"
    else
      IPADDR=`echo $LINE | awk 'BEGIN {FS=","} { print $1 }'`
      IPUSER=`echo $LINE | awk 'BEGIN {FS=","} { print $2 }'`
      IPPASS=`echo $LINE | awk 'BEGIN {FS=","} { print $3 }'`

      GUID=`ipmitool -H $IPADDR -U $IPUSER -P $IPPASS mc guid | grep GUID | awk 'BEGIN {FS=": "} { print $2 }'`
      GUID=`echo $GUID | sed -e 's/-//g' -e 's/"//g' | tr a-z A-Z`

      GUID_6=`echo $GUID | cut -c1-8`
      GUID_5=`echo $GUID | cut -c9-12`
      GUID_4=`echo $GUID | cut -c13-16`
      GUID_3=`echo $GUID | cut -c17-20`
      GUID_2=`echo $GUID | cut -c21-24`
      GUID_1=`echo $GUID | cut -c25-`
      echo $IPADDR,$GUID_1$GUID_2$GUID_3$GUID_4$GUID_5$GUID_6
    fi
done

2.Windows

WindowsでのUUID取得バッチは以下。
バッチファイルは、forの2重ループなどの場合は「setlocal ENABLEDELAYEDEXPANSION」を指定し変数の記述を変える必要がある。

@Echo off
setlocal ENABLEDELAYEDEXPANSION
Echo IPaddress,GUID
Set IPMI_LIST=%~f1
For /f "skip=1 tokens=1,2,3* delims=," %%a In (%IPMI_LIST%) Do (
    For /F "tokens=2 usebackq delims=^:^" %%x in (`ipmitool -H %%a -U %%b -P %%c mc guid ^| find "GUID"`) DO @set GUID_ORG_1=%%x
    Set GUID_ORG_2=!GUID_ORG_1: =!
    Set GUID_ORG_3=!GUID_ORG_2:-=!

    For %%z IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO Call Set GUID_ORG_3=%%GUID_ORG_3:%%z=%%z%%
    Set UUID_6=!GUID_ORG_3:~0,8!
    Set UUID_5=!GUID_ORG_3:~8,4!
    Set UUID_4=!GUID_ORG_3:~12,4!
    Set UUID_3=!GUID_ORG_3:~16,4!
    Set UUID_2=!GUID_ORG_3:~20,4!
    Set UUID_1=!GUID_ORG_3:~24,8!

    Echo %%a,!UUID_1!!UUID_2!!UUID_3!!UUID_4!!UUID_5!!UUID_6!
)

以上、これでより楽にGUID(UUID)の一括取得が可能となった。