Windows Server 2008 の管理タスクを自動化するための強力なツールの一つにWindows PowerShell がある。これはコマンドラインシェルであり、スクリプト言語でもある。PowerShell には、130 を超えるコマンドラインツール(コマンドレットと呼ばれる)がある。また、PowerShell は、統一性のある構文および名前付け規則を備え、簡易ナビゲーションを使用してレジストリや証明書ストアなどのデータを管理できる。さらに、特にIT 管理のために設計された直感的なスクリプト言語も備えている。Beta 3 の時点で、PowerShellはインストール可能なオプションの機能としてWindows Server 2008 に含まれている。

 PowerShell を使用すれば、サービス、プロセス、記憶域の管理といったWindows Server 2008 の管理タスクを効率的に実行できる。また、IIS(Internet Information Services)7.0、ターミナルサービス、Active Directory ドメインサービスなどのサーバーの役割の管理にも使用できる。Windows Server 2008 でPowerShell を使ってできることは、次のようなものである。

  • get-service、get-process、get-wmiobject コマンドレットを使用して、サービス、プ ロセス、レジストリ、WMI データをコマンドラインで管理する。
  • ターミナルサービスの構成を自動化し、ターミナルサーバーファーム全体で構成を比較する。
  • Web ファーム全体にIIS 7.0 を展開し、構成する。
  • Active Directoryでオブジェクトを作成し、現在のドメインに関する情報を一覧表示する。

 ここでは、3 番目の項目(PowerShell によるIIS 7.0の管理)について説明しよう。

私はなぜPowerShellを気に入っているのか

 マイクロソフトの新しいテクノロジすべての中で、PowerShell は最も刺激的なテクノロジの1 つであることは間違いない(もちろんIIS 7.0 以降で)。このWindows の新しいスクリプトシェルについて、なぜここまで断言できるか不思議に思われるかもしれない。しかし実際,強力になったコマンドプロンプトよりもさらにPowerShell の方が優れているのは確かである。では、PowerShell は、私が主に情熱を注いでいるWeb サーバーとWeb アプリケーションを使って何を行うのだろうか。

 PowerShell の設計者であるJeffrey Snover と私が出演しているChannel9 のビデオを見て、PowerShell が実際にどれほどすばらしいかを確認してほしい。このビデオは、Tech・Ed IT Forum におけるBob Muglia の基調講演のためにまとめたデモである。このデモはたいへんうまくいった(よくやった、ジェフリー)。

 遠い昔、学生だったころ、そして卒業してからも、マイクロソフトに入社してIIS チームに加わるまで、私は仕事をするのにLinux とBASH/ZSH を使っていた。しかし残念なことに、これまで私たちには、Windows の対話型シェルを作り出す力がなかった。私はシェルの昔からのヘビーユーザーとして、この新しいシェルインターフェイスがなぜ好きなのかをお伝えしようと思う。その後で、PowerShell がIIS 管理者の仕事をいかに簡略化するかについて説明する。

 PowerShell ではテキストではなくオブジェクトに対するコマンドを入力する。すると、PowerShell はテキストではなくオブジェクトを返してくる。コマンドは簡単に1 行にパイプできる。これにより、次のような複雑なコマンドを1 行で入力できる。

PS C:\Windows\System32> Get-ChildItem -Path G:\ -Recurse -Include *.mp3 | Where-Object -FilterScript {($_.LastWriteTime -gt "2006-10-01") -and ($_.Name -match "pearl jam")}| Copy -Destination C:\User\bills\Desktop\New_PJ_MP3s

 このコマンドは、再帰的に外部ハードディスク(G:)全体を調べ、最近追加されたPearl Jam のMP3 ファイルをすべて収集し、それらをデスクトップのフォルダにコピーする。この場合、すべてのMP3 ファイルが一覧表示されたテキストは出力されない。Copy コマンドを何度も使用する必要はなく、コピーに必要なすべての項目を1回パイプするだけですむ。

 PowerShell で私が非常に気に入っているもう1 つの点は、PowerShell コマンドに高い一貫性がある点だ。前述の例では、私はGet-ChildItem コマンドを1 回だけ使用した。しかし、安心してほしい。ほかのものを取得する場合も、そのコマンドはGet で始まる。同様に、プロセスやアプリケーションやその他の何かを停止する場合は、常にStop コマンドを使用する。Kill でもTerminate でもHalt でもない。Stop である。

 最後に、私はPowerShell が拡張可能である点も大いに気に入っている。なぜなら、これは、私のチームがIIS 6.0、IIS 7.0、そして今後のバージョンのIIS の管理に役立つ完全なIIS PowerShell コマンドレットのセットを作り出せることを意味するからだ。また、まもなく独自のIIS PowerShell スクリプトレットをこのコミュニティ領域に送信できるようになる予定である。

PowerShellでIIS 管理に使える上位五つの機能

 新しいシェルで気に入っている点はすべて挙げた。次に、PowerShell がどのようにしてこれまでよりIIS 管理を簡略化するかを説明しよう。次に示すのが上位5 つである。

  1. IIS 7.0 には、サイトおよびアプリケーションの開始、停止、作成、削除、構成を迅速に行うための新しいWMI プロバイダがある。そこで、PowerShell を使用して特定の構成設定別に並べ替えられたアプリケーションの一覧を提供する。次に、WMI プロバイダを使用して、特定の設定がされたアプリケーションを以前実行したタスクにパイプ接続する。同僚のSergei Antonov は、「Writing PowerShell Command-lets for IIS 7.0」というタイトルのすばらしい記事を発表している。この記事では、WMI プロバイダを使用してPowerShell コマンドレットを作成する方法が説明されている。

  2. IIS 7.0 には分散ファイルベースの構成ストアがあるので、アプリケーションのディレクトリにある、コードやコンテンツと並ぶweb.config ファイルにアプリケーションのIIS構成を格納できる。PowerShell を使用して、1 回の手順で迅速にアプリケーションをWeb ファーム全体にxcopy 展開できる。

  3. IIS 7.0 の新しいWeb.Administration API により、管理者は.NET で短いプログラムを作成し、頻繁に行われるIIS 7.0 管理タスクにプログラム的に取り組めるようになった。PowerShell は.NET Framework を完全にサポートしているため、PowerShell を使用して、この小さくて便利なコードの内外でIIS オブジェクトをパイプする。

  4. IIS 7.0 では、新しいRuntime Status and Control API を使用して、Web アプリケーションのパフォーマンスを監視できる。PowerShell を使用して、5 分おきにパフォーマンス情報を監視する。そして、このランタイム情報をコンソールに表示する。CPU 使用率が80 %を超えるときは、ログファイルに送る。

  5. 独自に構成されたカスタム要求処理モジュールを作成し、IIS Manager プラグインを用いることによって、IIS 7.0 の拡張性を利用する。カスタムIIS 構成をコマンドラインに公開し、IIS Manager プラグインを強化するために、管理用インターフェイスとして機能するPowerShell コマンドレットを作成する。

注意
 PowerShell を使用したIIS 7.0 の管理の詳細については、「An Introduction to Windows PowerShell and IIS 7.0」を参照してください。