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)に関するバージョン(およびビルド)情報を取得し、標準出力に書き込むシェルスクリプトを紹介した。だが、多くの読者はお使いのPCにOffice 365がインストール済みであり、そのバージョン情報をアカウントページから確認するのは少々面倒である。
そこでインストール済みOfficeのバージョン情報が、どこに格納されているか調べてみたところ、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configurationキーがマッチした。文字列値「VersionToReport」には、上図で示されたバージョン情報がデータとして格納されているため、同値をシェルスクリプト内から取得すればよい。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configurationキーの文字列値「VersionToReport」には、Officeのバージョン情報が格納されている |
Linux上からWindowsのregistryにアクセスするコマンドとしてlibhivex-binに含まれる「hivexget」などのコマンドがあるらしいが、今回はWindows 10の「reg.exe」を使った方法でシェルスクリプトを作成した。いつもどおり任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、chmodコマンドなどで実行権限を与えて動作を確認してほしい。
#!/bin/bash
URL='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'
REGKey=HKLM\\SOFTWARE\\Microsoft\\Office\\ClickToRun\\Configuration
REGValue=VersionToReport
IFS_Backup=$IFS
IFS=$'\n'
TmpFile=$(mktemp)
curl -s $URL -o $TmpFile
for Obj in `cat $TmpFile | grep \
-e 'デスクトップ向け最新の更新プログラム' \
-e '向けの最新更新プログラム' -A 2 | \
perl -pe 's/<[^>]*>//g; s/--//g; s/^[ ]*//g; s/\r\n//m'`; do
case ${Obj} in
Windows\ デスクトップ* )
Win=$(echo $Obj | cut -d " " -f 3-5) ;;
Mac* )
Mac=$(echo $Obj | cut -d " " -f 4-5) ;;
iOS* )
iOS=$(echo $Obj | cut -d " " -f 4) ;;
Android* )
Android=$(echo $Obj | cut -d " " -f 4) ;;
Windows\ Mobile* )
WM=$(echo $Obj | cut -d " " -f 5) ;;
esac
done
echo -e "Windows版バージョン\t" $Win
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] ]] ;
echo -e "インストール済みOffice\t" $REGStr
fi
echo -e "Mac版\t\t\t" $Mac
echo -e "iOS版\t\t\t" $iOS
echo -e "Android版\t\t" $Android
echo -e "Windows Mobile版\t" $WM
rm $TmpFile
IFS=$IFS_Backup
本シェルスクリプトを実行すると、日本語版の公式サイトからHTMLファイルを取得し、各OSのバージョン情報を抽出した後、レジストリにアクセスしてインストール済みOfficeのバージョン情報を取得。そして標準出力に書き出す。
それではシェルスクリプトの内容を解説しよう。今回の注目点は33~35行目の部分。33行目は「reg.exe」で変数REGKeyで定義したHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configurationキーと、変数REGValueで定義した文字列値「VersionToReport」の情報を取得し、配列ARRAYに格納している。今回変数ではなく配列にしたのは、取得情報に値の種類など不用な情報が含まれるためだ。
34行目は配列ARRAYに格納された情報からバージョン情報だけを取得し、そこからawkで不用な部分を削除した結果を、変数REGStrに格納している。なお、Officeがインストールされていない場合はエラーを吐く。また、今回は出力結果が冗長に感じたため、38~41行目で実行するechoの内容を若干修正した。前回の記事で述べた日米版の差に関する課題が残ってしまったが、こちらは次回以降の設題として残しておく。
阿久津良和(Cactus)