Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。
米国本家のOfficeのバージョンも合わせて取得する
さて前回は、Microsoftのサブスクリプションサービスである「Office 365」に含まれる最新バージョンのOffice(=Office 2016)に関するバージョン(およびビルド)情報や、インストール済みOffice(Windows版限定)のバージョン情報を表示させるシェルスクリプトを紹介した。
当初から述べてきたように、Office自体のアップデートはグローバル全体でほぼ同じタイミングながらも、「Office 365の新機能」の更新は米国と比べると若干の遅延がある。そこで、今回は「What's new in Office 365」の情報も同様に取得するコードを追加した。
いつもどおり任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、chmodコマンドなどで実行権限を与えて動作を確認してほしい。
#!/bin/bash
URLjp='https://support.office.com/ja-jp/article/Office-365-%e3%81%ae%e6%96%b0%e6%a9%9f%e8%83%bd-95c8d81d-08ba-42c1-914f-bca4603e1426?ui=ja-JP&rs=ja-JP&ad=JP'
URLus='https://support.office.com/en-us/article/What-s-new-in-Office-365-95c8d81d-08ba-42c1-914f-bca4603e1426?ui=en-US&rs=en-US&ad=US'
REGKey=HKLM\\SOFTWARE\\Microsoft\\Office\\ClickToRun\\Configuration
REGValue=VersionToReport
IFS_Backup=$IFS
IFS=$'\n'
TmpFile1=$(mktemp)
curl -s $URLjp -o $TmpFile1
for Obj in `cat $TmpFile1 | grep \
-e 'デスクトップ向け最新の更新プログラム' \
-e '向けの最新更新プログラム' -A 2 | \
perl -pe 's/<[^>]*>//g; s/--//g; s/^[ ]*//g; s/\r\n//m'`; do
case ${Obj} in
Windows\ デスクトップ* )
WinJP=$(echo $Obj | cut -d " " -f 3-5) ;;
Mac* )
MacJP=$(echo $Obj | cut -d " " -f 4-5) ;;
iOS* )
iOSJP=$(echo $Obj | cut -d " " -f 4) ;;
Android* )
AndroidJP=$(echo $Obj | cut -d " " -f 4) ;;
Windows\ Mobile* )
WMJP=$(echo $Obj | cut -d " " -f 5) ;;
esac
done
TmpFile2=$(mktemp)
curl -s $URLus -o $TmpFile2
for Obj2 in `cat $TmpFile2 | grep 'Latest updates for' -A 1 | \
perl -pe 's/<[^>]*>//g; s/--//g; s/^[ ]*//g; s/\r\n//m'`; do
case ${Obj2} in
*Windows\ Desktop* )
WinUS=$(echo $Obj2 | cut -d " " -f 14-16);;
*Mac* )
MacUS=$(echo $Obj2 | cut -d " " -f 16-17) ;;
*iOS* )
iOSUS=$(echo $Obj2 | cut -d " " -f 16) ;;
*Android* )
AndroidUS=$(echo $Obj2 | cut -d " " -f 16) ;;
*Windows\ Mobile* )
WMUS=$(echo $Obj2 | cut -d " " -f 18) ;;
esac
done
echo -e "Windows版バージョン(JP)\t\t" $WinJP
echo -e "Windows版バージョン(US)\t\t" $WinUS
ARRAY=(`reg.exe query $REGKey /v $REGValue`) 2>/dev/null
REGStr=(`echo ${ARRAY[2]} | awk '{print substr($0, index($0, "Z"+1))}'`)
if [[ $REGStr =~ ^[0-9] ]] ; then
echo -e "Windows版インストール済み\t" $REGStr
fi
echo -e "Mac版(JP)\t\t\t" $MacJP
echo -e "Mac版(US)\t\t\t" $MacUS
echo -e "iOS版(JP)\t\t\t" $iOSJP
echo -e "iOS版(US)\t\t\t" $iOSUS
echo -e "Android版(JP)\t\t\t" $AndroidJP
echo -e "Android版(US)\t\t\t" $AndroidUS
echo -e "Windows Mobile版(JP)\t\t" $WMJP
echo -e "Windows Mobile版(US)\t\t" $WMUS
rm $TmpFile1 $TmpFile2
IFS=$IFS_Backup
本シェルスクリプトを実行すると、日本語および米国版の公式サイトからHTMLファイルを取得し、各OSのバージョン情報を抽出した後、レジストリにアクセスしてインストール済みOfficeのバージョン情報を取得。そして標準出力に書き出される。
それではシェルスクリプトの内容を解説しよう。今回の注目点は31~48行目に追加した取得部分。基本的な内容は日本語版公式ページと同じように、curlでHTMLファイルを取得し、grepで「Latest updates for」を含む行および次の行までの取得。その結果をperlで加工している。また、取得した文字列が「Latest updates for Windows DesktopTake~」となったため、case文のパターンはワイルドカードを前方にも追加した。
実行結果をご覧になるとひと目で分かるように、Windows版などは同じバージョンながらも、iOS版のみ米国版が先行している。このようにWebページにアクセスせずとも、簡単な情報を手軽に取得できるため、業務内容に応じてカスタマイズしてほしい。