私は、Windows の上でプログラムを組むのが嫌いです。
大きなプログラムを組めるわけではないので、もっぱらログ処理とか、繰り返し手作業の自動化のためのスクリプト程度なのですが、Windows OSの場合、OS標準で組み込まれている command.com や cmd.exe で出来ることが、Unix シェルと比べると貧弱。
Unix のシェルスクリプトに慣れている私にとって、Windows cmd は for ループで数行程度のコマンドを回すのが精一杯。VBなどのプログラミング言語を入れれば、もっとプログラミングに馴染めるのでしょうが、Virtual PCやVirtual BOX を入れて、自分のUnix環境を起動すれば無料で馴染んだスクリプト環境を持ち歩けるのに、わざわざ有料のパッケージを買う気はありません。それに、Cygwin を入れれば、ほぼ Unix と同様のスクリプトプログラミング環境を使う事が出来ます。問題は、これらはWindows標準環境ではなく、手作業で追加インストールする必要があること。
仮に、自分の環境を色々整えても、隣のPCや、オンサイトしたPCで開発したコマンドは使えません。
そして、Windows プログラミング環境の何が嫌かって、言語技術取得が無駄になること。
Windowsの場合、その時代時代の標準言語環境の寿命が短い。Unix の場合は、B shell が標準シェルで、これを拡張する形で、bash や ksh など上位シェルが登場してきているので、シェルスクリプトを学習することは無駄になりません。awk, sed, perl も標準で入っているので、どこででも、いつまでも使えますから技術取得が無駄になりません。
Windowsの場合、cmd シェルは元々機能や使えるコマンドが少ないし、中身もころころ変わるので、取得した技術が陳腐化するのが早すぎ。
こういう理由で、Windows のシェルスクリプティングは、全く勉強する気がなかったのですが、最近職場の同僚から PowerShell を紹介されました。
どうせ、これも寿命の短い環境なんだろうと思っていますが、PowerShell ISE を起動してみると、貧弱なコマンドしか持たない cmd.exe と比べると Unix ライクな処理が出来ます。正式なコマンド名は全く異なりますが、標準設定済みの alias が充実しているため、文字処理をメインに考えると、Unix ライクに使用でき、違いは Bシェル系とCシェル系の違い程度で私の知識で吸収できるレベル。
私のように、PC設備管理のような仕事をしていると、ユーザーPCの現状を把握したいことが多く、PowerShell を使うと、PCハードウェア情報にリモートから簡単にアクセスできそうで、多少の欠点には目をつむって使ってみる気になりました。たとえると、あのPCにメモリ、何GBと何GBのDIMMを積んでいたっけ?
PowerShell を使うと、これが一発でわかるところがありがたいわけです。
例えば、次のようなコマンド。
> gwmi -Class win32_physicalmemory -computername . | fl banklabel, capacity, partnumber, serialnumber banklabel : BANK 0 capacity : 1073741824 partnumber : HMT312S6BFR6C-H9 serialnumber : 19586921 banklabel : BANK 1 capacity : 1073741824 partnumber : HMT312S6BFR6C-H9 serialnumber : 31342314
PC を開けることなく、各バンクにインストールされているメモリ容量、メモリのパーツ番号、シリアル番号まで簡単に取ってくることが出来ます。
これにはびっくり。PCケースを開けても、メモリの型番なんて探すのが大変だし、シリアル番号なんてわかりませんからね。
上記コマンドの説明をちょっとだけしておくと、gwmi -Class Win32_PysicalMemory というのがメモリ情報を取ってくるためのコマンド。-ComupterName <PC名>でPC名を指定しますが、上記コマンドでは自己PCなのでピリオド。パイプ fl で出力情報をフィルターして、メモリバンク、容量、パーツ番号、シリアル番号 に限定しています。
管理しているPC名一覧表を作って、このコマンドスクリプトで FORループするように書けば、簡単にPCの実装メモリ容量やパーツ番号一覧表が出来上がります。これが標準でPCに入っているというのは便利、便利。
PowerShell すげー。
自宅のWindows7 PCで PowerShell を起動してみると、仕事で使っている PowerShell 環境と何か雰囲気が違う!
バージョンをチェックしてみると、自宅環境は ver2、仕事環境は ver3 であることだと判明。
バージョンアップしようとして手間取りました。
というのは、PowerShell って単体ダウンロードしてインストールしたり、Windows Update でかってにアップデートされるものではないようです。
検索してみると、Windows Management Framework 3.0 を入れると、一緒に PowerShell 3.0 に更新されるようです。情報源。
Windows Management Framework 3.0 を入れたところ、無事、PowerShell 3.0 になりました。
> Get-Host | Select-Object Version Version ------- 3.0
2.0 とちょっとユーザーインタフェースの雰囲気が変わりました。
最後に、PowerShell を管理者から起動して、
Set-ExecutionPolicy RemoteSigned -Force
を実行。
以上で、自宅環境で PowerShell 3.0 が使えるようになりました。どの程度のめり込むかは今後のお楽しみ。