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

1.外部ファイル

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

●ipmi.list

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

2.Linux

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

bash
#!/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」を指定し変数の記述を変える必要がある。

shell
@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)の一括取得が可能となった。