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は並んでいないのだ。
開発者向けカンファレンス「Build 2017」でアナウンスされたように、2017年9月リリース予定のWindows 10 Fall Creators Updateでは、Ubuntu以外にopenSUSEやFedoraといった、他のLinuxディストリビューションが利用可能になる。そのための布石と思われるが、インストールできないと何も始めることはできない。少々困っていたところで思い出したのが、lxrun.exeの存在だ。WSLのインストールやアンインストール、デフォルトユーザーの設定を実行するコマンドだが、「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のモデル情報と名称を表示する。
前回のシェルスクリプトと基本的なロジックは同様だが、今回はcutコマンドではなく、変数展開を利用した。パフォーマンス的な差はないものの、可読性は少々向上したのではないだろうか。