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

写真拡大

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ページにアクセスせずとも、簡単な情報を手軽に取得できるため、業務内容に応じてカスタマイズしてほしい。