【連載】

Windows 10で始めるBash

45 米国本家のOfficeの最新バージョン情報もBashで取得する

45/46

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のバージョン情報を取得。そして標準出力に書き出される。

シェルスクリプトを実行した状態。各OSのバージョン(ビルド番号)などが表示される

それではシェルスクリプトの内容を解説しよう。今回の注目点は31~48行目に追加した取得部分。基本的な内容は日本語版公式ページと同じように、curlでHTMLファイルを取得し、grepで「Latest updates for」を含む行および次の行までの取得。その結果をperlで加工している。また、取得した文字列が「Latest updates for Windows DesktopTake~」となったため、case文のパターンはワイルドカードを前方にも追加した。

実行結果をご覧になるとひと目で分かるように、Windows版などは同じバージョンながらも、iOS版のみ米国版が先行している。このようにWebページにアクセスせずとも、簡単な情報を手軽に取得できるため、業務内容に応じてカスタマイズしてほしい。

<お知らせ>
ITソリューション検討Information

マイナビニュースのIT Search+では、ITソリューションの検討に役立つ情報を掲載しています。
ここでは、IT Search+の人気記事ベスト3をご紹介。ぜひ、ビジネスにお役立てください。

45/46

インデックス

連載目次
第46回 Windows 10とWSLの最新バージョンをBashで取得する
第45回 米国本家のOfficeの最新バージョン情報もBashで取得する
第44回 インストール済みのOfficeバージョンを取得する
第43回 Office 2016の最新バージョン情報を公式サイトから取得する
第42回 1週間のファイルをISOファイルに書き込むシェルスクリプト
第41回 WSL上のLinuxディストリビューションを変更する
第40回 知ってますか今年の祝日? 国民の祝日自動取得シェルスクリプト
第39回 Bashから当日使ったファイルをWindowsのアプリケーションで開く
第38回 Findで当日使ったファイルを検索する
第37回 HTMLコードの出力シェルスクリプトをRowspan属性に対応させる
第36回 HTMLのTableタグ出力シェルスクリプトをColspanに対応させる
第35回 BashでHTMLのTableタグを楽に
第34回 ファイル名の大/小文字一括変更シェルスクリプトをオプションで制御する
第33回 規則に応じたファイル名の大/小文字化
第32回 拡張子を一括で小文字に統一するスクリプト
第31回 Googleカレンダーから情報を抜き出す
第30回 ドライブを占有するフォルダー容量をExcelで可視化する
第29回 ドライブを占有するフォルダー容量を「R」で可視化する
第28回 ドライブを占有するフォルダー容量をSparkで可視化する
第27回 ドライブを占有する容量をフォルダーごとに簡単確認
第26回 オプションを加え汎用性を高めたレジストリーキー比較スクリプト
第25回 Reg.exeの出力結果をカラフルにして見やすくする
第24回 Reg.exeの出力結果を比較する
第23回 getoptsを活用してイベントソース可視化を大幅に拡張する
第22回 BashからPowerShellを利用する
第21回 Windowsのイベントソースを可視化してオプションで表示を分ける
第20回 Windowsのイベントログを「Cut」で切り出し可視化する
第19回 PDFファイルを画像ファイル化する
第18回 PDFファイルから一括で大量の画像を抽出
第17回 複数PDFファイルから一括テキスト抽出
第16回 文章をMarkdown記法で整える
第15回 ファイル名ではなく内容判断で重複ファイルを削除するには?
第14回 整理整頓!空のフォルダを一括でデスクトップに移送する
第13回 フォルダの中のファイルを一括でPDFにするには
第12回 フォルダーの中のエクセル請求書ファイルを合計する
第11回 BashからExcelブックにアクセスする
第10回 時間軸でデスクトップを片付ける
第9回 散らかったデスクトップを片付ける
第8回 インターネットショートカットファイルを作成する
第7回 取得結果をCSVファイルやテキストファイルに出力する
第6回 Webページの情報をシェルスクリプトで取得する
第5回 case文でスクリプト内容を整理する
第4回 実行先のフォルダーを引数で指定する
第3回 ピクセルサイズに応じて画像ファイルをリサイズする
第2回 他の画像形式をJPEG形式に変更する
第1回 フォルダー内のJPEGファイルを連番でリネームする

もっと見る



人気記事

一覧

イチオシ記事

新着記事