連載
» 2010年03月11日 00時00分 公開

PowerShell的システム管理入門:第1回 PowerShellの概要 (2/4)

[牟田口大介(Microsoft MVP for Data Center Management - PowerShell),著]

なぜ新しいシェルが必要なのか?

 PowerShellの話に入る前に、そもそもPowerShellが必要とされた背景について触れておこう。もともとWindows OSのシェルといえばGUIベースのエクスプローラがすべての基本であった。また、CUIのシェルとしては従来からコマンド・プロンプトが標準機能として使用可能である。Windows OSではこれら2種類のシェルを適宜使い分けてシステム管理を行う。そこになぜ新しいCUIのシェルが必要なのだろうか。

理由その1:コマンド・プロンプトの進化が限界に来ているため
 コマンド・プロンプトはWindows OSの進化に伴い、その機能をどんどん拡張していった。この拡張には文法の拡張によるものも含まれるが、主にコマンド・プロンプトから呼び出すコマンドライン・ツール(外部コマンド)を増強することで行われた。今では何百という外部コマンドが存在し、どのようなコマンドが存在するのかすらも把握するのが困難である。しかもその使い方は統一性がないため、知らないコマンドを利用するためにはそのたびに使用法を確認しなくてはならない。

理由その2:コマンド・プロンプトのバッチ機能が不十分であるため
 コマンド・プロンプトはそこに入力するコマンドをあらかじめテキスト・ファイルに記述し、バッチ・ファイルとして実行することで、定期的にあるいは任意のタイミングで決まった動作を何度も実行することができるのが特徴である。しかし、コマンド・プロンプトは構造化されたコードを書くことができず、各種プログラミング言語やスクリプト言語に比べて非常に限定的な機能しか備えていない。スクリプト機能に関しては先ほども述べたとおりWSHがあるが、WSHにも記述が冗長である、コンソールによる対話的実行が不可能であるなどの問題点があり、代替とするには力不足である。

 このような問題点を一挙に解決するため、Microsoftはシステム管理用に特化し、優れたスクリプト機能もあわせ持つ新しいシェルを開発する必要に迫られたわけである。

PowerShellの誕生

 そのような事情を踏まえ、Windows XP/Vista/Server 2003用のPowerShell 1.0が2006〜2007年にリリースされた。Windows Server 2008には追加機能としてOSに同梱されている。続いて2009年に登場したPowerShell 2.0は、Windows 7およびWindows Server 2008 R2ではOS標準機能として搭載されるようになった。

PowerShellの実行画面
Windows Server 2008 R2でのPowerShell実行画面(PowerShellコンソール)。

 PowerShellは、コマンドレットという100種類以上のコマンドライン・ツール群を使用するのが基本である。コマンドレットはコマンド・プロンプトの外部コマンドとは異なり、使用方法や出力形式などが統一化されており、習熟が容易である。またPowerShellは本格的なスクリプト言語でもあり、高度な文法を備えているためスクリプト・ファイルにはバッチ・ファイルより高度な処理を記述することができる。

 PowerShellは従来のシェル/スクリプト言語と異なり、システム管理に特化されているのも特徴的である。システム管理を行うためのコマンドレットが多く存在し、簡便に用いることができる。またコマンドレットを組み合わせることで、より高度な処理も可能である。コマンドレットの組み合わせは、従来のシェルと同様、基本的に「|(パイプ機能)」を通して行われる。あるコマンドレットの出力をパイプに渡し、後続のコマンドレットの入力とする。従来のシェルとは異なり、コマンドレットが出力してパイプに渡されるのはテキストではなく、.NET Frameworkのオブジェクト配列である。従来のシェルのように、パイプに渡す前にテキスト・データを整形/解釈する必要はなく、プロパティ情報を保持したまま、オブジェクトとして次々と後続コマンドレットに渡していけるところがポイントである。

 例を挙げよう。Get-Processはプロセスの一覧を取得するコマンドレットであるが、このコマンドレットはSystem.Diagnostics.Processクラスのインスタンスを配列として返す。よって、

Get-Process | Sort-Object -property Handles

のように、パイプを通じてGet-Processの結果をSort-Objectコマンドレットに渡すと、Processオブジェクト配列をHandlesプロパティ(プロセスに含まれるハンドル)の値の小さい順に整列して出力する、といったことが可能になる。

Get-Processコマンドレットとパイプの使用
Get-Processコマンドレットの出力結果をSort-Objectコマンドレットを使ってパイプで渡し、ハンドル(Handlesフィールド)の値順にソートして、Select-Objectコマンドレットで最初の10件を表示させている。

 PowerShellではコマンドレットを単独で利用したり、あるいはパイプを使って組み合わせたりすることで、容易にさまざまなシステム管理を行える。それでは次のページで実際にPowerShellをインストールして使ってみよう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。