画像提供:マイナビニュース

写真拡大

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」には、上図で示されたバージョン情報がデータとして格納されているため、同値をシェルスクリプト内から取得すればよい。

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)