写真提供:マイナビニュース

写真拡大

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コマンドなどで実行権限を与えて動作を確認してほしい。

本シェルスクリプトを実行すると、日本語版の公式サイトから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)

(阿久津良和)