Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

CPU情報をPowerShell経由で取得する

私事で恐縮だが、昨日新たな2-in-1 PCを購入し、Windows 10 Insider Preview ビルド16215に更新を行ってから、WSLの環境構築に取りかかったところ、ちょっとしたトラブルに出くわした。Bash.exeを起動するとWindowsストア経由でのダウンロードをうながされるため、指定されたURLにアクセスしたところ、Windowsストアで「WSL Linux」を検索するショートカットのようである。だが、そこにWSL用のUbuntuは並んでいないのだ。

ビルド16215上で新規にBUWのインストールを試みると、Windowsストア経由のダウンロードをうながされる

開発者向けカンファレンス「Build 2017」でアナウンスされたように、2017年9月リリース予定のWindows 10 Fall Creators Updateでは、Ubuntu以外にopenSUSEやFedoraといった、他のLinuxディストリビューションが利用可能になる。そのための布石と思われるが、インストールできないと何も始めることはできない。少々困っていたところで思い出したのが、lxrun.exeの存在だ。WSLのインストールやアンインストール、デフォルトユーザーの設定を実行するコマンドだが、「lxrun /install」で難なくBUWが使えるようになったのである。

コマンドプロンプトやWindows PowerShellから「lxrun /install」を実行して、BUWをインストールした

ただし、Windows PowerShell(以下、PowerShell)側の問題なのか、既定のUNIXユーザーアカウント作成プロセスに処理が進まず、ダウンロードスクリプトを1度中断する必要があった。未確認だがプロンプトを表示せずに処理を進める「/y」オプションを使えば回避できるだろう。ちなみにlxrun.exeのヘルプメッセージを確認すると、「Warning: lxrun.exe is only used to configure the legacy Windows Subsystem for Linux distribution. Distributions can be installed by visiting the Windows Store」との一文が加わっていた。単にインストールプロセスの変更に伴い、メッセージを加えたのだと推察する。

さて、今回はCPU情報をシェルスクリプトで取り出して見よう。Windows 10上で同情報を得る方法は多岐にわたるが、今回はWMI(Windows Management Instrumentation)のクラス「Win32_Processor」をPowerShell経由で呼び出すことにした。いつもどおり、任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、chmodコマンドなどで実行権限を与えて動作を確認してほしい。

 #!/bin/bash

 IFS_Backup=$IFS
 IFS=$'\n'

 for Obj in `powershell.exe Get-WmiObject -Class Win32_Processor`; do
    case ${Obj} in
        Name* )
            StrName=$(echo ${Obj:20})
            echo "Name :" $StrName
            ;;
        Caption* )
            StrCPU=$(echo ${Obj:20})
            echo "Model:" $StrCPU
            ;;
    esac
 done

 IFS=$IFS_Backup

本シェルスクリプトを実行すると、Win32_Processorから取得した情報を元にCPUのモデル情報と名称を表示する。

シェルスクリプトの実行結果。CPU情報を出力した

前回のシェルスクリプトと基本的なロジックは同様だが、今回はcutコマンドではなく、変数展開を利用した。パフォーマンス的な差はないものの、可読性は少々向上したのではないだろうか。