PowerShellコトハジメと注目のポイント

では、具体的に触れながら見ていこう。

まず、Windows 7を用意するか、またはWindows XPやVistaにPowerShellをインストールしてPowerShellが利用できる環境を整えてほしい。

インタラクティブに動作するPowerShellは、コマンドプロンプトのようにターミナルとセットで起動してくる。シェルスクリプトのようにファイルに書いて実行することもできるが、はじめはインタラクティブシェルで機能に慣れていくのがよいだろう。

PowerShellの導入記事はいくつもでているし、マイコミジャーナルにも記事がアップされているので、参考にしながら一通り作業していく。経験が深いユーザならこの段階でPowerShellの全容がすでに把握できるはずだ。

・Windows PowerShellの機能 - TechNet
 http://www.microsoft.com/japan/technet/scriptcenter/topics/msh/cmdlets/index.mspx

・Windows PowerShell コマンドレットのタスク別ガイド - TechNet
 http://technet.microsoft.com/ja-jp/scriptcenter/dd772285.aspx

・GUIユーザーのためのPowerShell入門 - マイコミジャーナル連載
 http://journal.mycom.co.jp/column/powershell/index.html

UNIXユーザにも親しみやすく生まれ変わったPowerShellだが、しばらく使ってみると、いくつか疑問も出てくる。

例えば、grepといった外すことができないコマンドが用意されていないし(近いものとしてはselect-stringが該当する)、それにmanで表示されるコマンド名がGet-Helpのように、入力したコマンドとは別のものになっている。それに根本的に何かが違うところがある。

PowerShellは、最初はUNIXのシェルのようなものに見える。しかし実際には、オブジェクト指向ベースのスクリプト言語であり、シェルやシェルスクリプトのように振る舞うのはそのように工夫されているだけの話ということのようだ。

特に抑えておくとよいPowerShellとシェルスクリプトの主な違いを次にまとめる。

種別 UNIXシェルスクリプト Windows PowerShell
プログラミング言語性 コマンドが主体。コマンドをつなぎ合わせることで処理を行う。データはテキストがメイン オブジェクト指向。シェルスクリプト風やLL風の構文を採用しているが、実体はオブジェクト指向言語であり、.NET Frameworkをベースとしたプログラミング言語。
主な実行単位 コマンド、関数、組み込みコマンド。コマンドは別プロセスとして起動される。 コマンドレット、関数、コマンド、.NET Framework、COM。コマンドレットが主な実行単位で実体は.NETのクラス。コマンドレットは別プロセスとしては起動されずに内部で処理される。
コマンド大文字小文字 区別する。 コマンドレットの大文字小文字は区別されない。get-helpもGet-HelpもGET-HELPもどれも同じ。
コマンド名の命名規則 特になし。慣例的に小文字で短いコマンド名が使われることが多い。 「動詞-名詞」が基本。lsやdateなどはエイリアスで用意された名前で、本来はGet-ChildItemやGet-Dateといった名前。
パイプ パイプは標準出力と標準入力のディスクリプタを結合する処理に該当。パイプで流れるデータは文字列やバイナリなどただのデータ。 パイプで渡されるデータはオブジェクト。文字列であれば文字列オブジェクトが渡される。このため渡ってくるデータのメソッドを叩いて処理を行うといったことが可能。
リソーススキーマ ファイルシステムが基本。ディレクトリとファイルという基本的な種類あり。 プロバイダという概念を導入。ファイルシステムはプロバイダのひとつ。ほかのプロバイダに切り替えれば、ファイルシステムに適用してたのと同じコマンドでそのプロバイダ向けの処理を実施できる。

この中でも、特に注意した方がよい部分について補足しておこう。