Exchange Server 2007には,.NET Frameworkをベースにした新しいコマンドライン環境「PowerShell」が搭載されている。次期サーバーOS「Windows Server 2008」にも搭載される機能だが,Exchange Server 2007にいち早く搭載された。このPowerShellを使ってExchange Server 2007を管理する手法を,全3回の短期集中連載で解説する。



 「Monad」という開発コード名だったPowerShellは,Windowsに強力なスクリプティング機能を提供する。これまでも「VBScript」に代表されるように,Windows上には様々なスクリプト(特定の機能を実現するための簡易プログラム)環境があった。しかし,プログラムしやすいとは言えず,また処理速度も通常のプログラムと違って遅いという欠点があった。

 一方のUNIXの世界では,UNIXコマンドを組み合わせて,容易にシステムの管理に必要なスクリプトを作成できた。これは,UNIXはもともとCLI(コマンド・ライン・インターフェース)ベースのOSであり,WindowsはGUI(グラフィカル・ユーザー・インターフェース)ベースで開発されたOSだからであろう。しかし近年,複雑なシステムを短期間で確実に構築する必要性は日々高まっている。また,日常的な運用現場でも,操作ミスを起こすことができない状況にある。

 こうした背景からMicrosoftは,システム管理の自動化,さらにアプリケーションの開発にも利用できる,より強力で使いやすいスクリプティングのコマンド環境を.NET Framework上で開発したのである。これがPowerShellだ。もちろん,PowerShellはインタラクティブ・シェルであり,対話型の処理にも利用できる。PowerShellの特徴については,数多くのWebサイトで取り上げられている(以下参照)ため,本コラムでは,Exchange Server 2007に焦点を絞ってお話ししよう。

 では,Exchange Server 2007上で,PowerShellを使ってどんなことができるのか,早速ご覧いただくことにしよう。

「ADSI/CDOEXM」VS「Exchange管理シェル」

 Exchange Server 2003までは,ADSI(Active Directory Service Interfaces)やCDOEXM(CDO for Exchange Management)を使用したプログラム(スクリプト)が主に利用されていた。リスト1は,メールボックスを有効化するためのスクリプトの例である。

リスト1●ADSIやCDOEXMを使ったメールボックスを有効化するスクリプト

'---   ADSIを利用したプログラム例(抜粋)  ---
Dim ObjPerson As IADsUser
Dim ObjContainer As IADsContainer
Dim strHomeMDBUrl As String
Dim strContainerUrl As String
Dim strRecipient As String

	(中略)

strHomeMDBUrl = "CN=Mailbox Database,CN=First Storage Group,CN=InformationStore,CN=E2000,CN=Servers,CN=Exchange Administrative Group,CN=Administrative Groups,CN=HP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=root,DC=com"
strContainerUrl = "LDAP://CN=Users,DC=root,DC=com"
strRecipient = "CN=" + strUsername
Set ObjContainer = GetObject(strContainerUrl)
Set ObjPerson = ObjContainer.GetObject("User", strRecipient)

	(中略)

Set ObjMailBox = ObjPerson
ObjMailBox.CreateMailbox strHomeMDBUrl

	(中略)

ObjPerson.SetInfo

Set ObjPerson = Nothing
Set ObjContainer = Nothing
Set ObjMailbox = Nothing

[スクロールバーが表示されない場合はこちらをクリック]

 同様のことを,Exchange Server 2007版のPowerShellである「Exchange管理シェルを使うとどうなるだろう。実は,コマンド1のようないたって簡単なコマンドで実現できるのである。

コマンド1●Exchange管理シェルでメールボックスを有効化する(実際には1行で入力する)
Enable-Mailbox -Identity 'root.com/Users/user1' -Database 'CN=Mailbox Database,CN=First Storage Group,CN=InformationStore,CN=E2007J,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=HP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=root,DC=com'

 ここでは「Enable-Mailbox」というCmdlet(コマンドレット)を使用している。コマンドレットとは,単一の機能を実現するコマンドのことであり,Exchange Server 2007の管理シェルには,Windows PowerShellを含む約350個のコマンドレットが実装されている。

 コマンド1では,パラメータにユーザーのIDとデータベースのIDを指定するだけで,メールボックスを有効化できる。なおユーザーのIDは,「'root\user1'」などのように指定することもできる。

Exchange管理シェルに実装されたコマンドレットとは?

  Exchange Server 2007では,実際にどのようなコマンドレットが実装されているのか,見てみよう。

 まず,Exchange Server 2007をインストールしたサーバー上で「Exchange管理シェル」を立ち上げてみよう(図1)。最初に,「Tip of the day」(Tip:豆知識のようなもの)が表示される。ここで「Get-Command」と入力してみよう。すると,図2のように,スクロール・アウトしてしまうほどの数のコマンドレットが出力される。

図1●Exchange管理シェルを起動した画面
[画像のクリックで拡大表示]

図2●Get-Commandを使って出力したコマンドレット一覧
[画像のクリックで拡大表示]

 なお,コマンドレットに関するヘルプを見るのであれば,コマンド2のように「Get-Help」コマンドをパイプ処理して,ヘルプの内容をテキストに出力すると便利だろう。

コマンド2●コマンドレットのヘルプをテキスト・ファイルに出力する
Get-Command | Get-Help | Out-File C:\E2K7help.txt

 図3は,実際に出力してみたコマンドレットのヘルプの例である。

図3●テキスト・ファイルに出力したコマンドレットのヘルプ
[画像のクリックで拡大表示]

 もちろん,単純にコマンド3のようなコマンドを実行して,個々のコマンドレットに関するヘルプも見られる。図4がそのヘルプである。

コマンド3●Enable-Mailboxコマンドレットのヘルプを表示する
Get-Help Enable-Mailbox

図4●Enable-Mailboxコマンドレットのヘルプ
[画像のクリックで拡大表示]

 マイクロソフトが運営する「TechNet」のWebサイトには,「Exchange 2007コマンドレット一覧」という,すべてのコマンドレット一覧が掲載されている。ただし,こちらはオブジェクト名のアルファベット順に記載されているので,コマンドレット名順に参照したい場合は,先に図3で示した,ヘルプをテキスト・ファイルで取得する方法をお勧めする。

 次回は,Exchange Server 2007を構築および運用する上で,頻繁に利用することになるいくつかのコマンドレットについてご紹介しよう。


田辺 武
日本ヒューレット・パッカード株式会社
グローバルデリバリ統括本部オペレーションサービス本部
サーバーオペレーション第二部
マスターテクノロジーコンサルタント
 日本デジタルイクイップメントに入社後,ネットワーク製品の保守に携わる。その後,メッセージング製品を中心にコンサルティング・ビジネスのデリバリ・サービスを手がける。コンパックを経て,現在のヒューレット・パッカードに至るまで,Windowsプラットフォームをベースにした数多くのITインフラストラクチャ構築の経験を持つ。特に,Exchange Serverに関しては,Exchange 4.0時代から設計/構築/展開を実施し,cc:MailやBanyan Mailからの移行,Exchange 5.xから200xへのアップグレードなどの豊富な経験を有する。現在,グローバルデリバリ関連のITアウトソーシング部門に所属し,Exchange,MOSS,SQL Serverなどを含むマイクロソフト製品の技術サポートを担当している。