Exchange Server 2007には,.NET Frameworkをベースにした新しいコマンドライン環境「PowerShell」が搭載されている。本連載は全3回の短期集中で,PowerShellを使ってExchange Server 2007を管理する手法を解説する。第3回は,メールボックスの移動や,Exchange Server 2007の監視といった現実的な管理シナリオを,PowerShellで自動化する手法を紹介する。



PowerShellでメールボックスを移動する

 システムの動作が不安定になったり,ストア・データベースの容量がストレージ領域を圧迫するなどの事態が発生したりするような場合は,ユーザーのメールボックスを他のサーバーや,別のストア・データベースに移動することになるだろう。

 これまでは,そうした操作を行うためには,GUIのExchangeシステム管理ツールを起動して,特定のユーザーをCtrlキーまたはShiftキーを使って選択していたものである(図14)。しかし,GUIベースの管理ツールには,操作ミスを起こしやすいという欠点がある。特に,緊急事態が発生しているときには,落ち着いて操作をするのは難しい。そこで,前もって「Exchange管理シェル」のスクリプトを用意して,できる限り少ない操作を実行するようにしておけば,操作ミスを減らせるだろう。

図14●Exchange管理コンソールを使ったメールボックスの移動
[画像のクリックで拡大表示]

 では実際に,Exchange管理シェルの「Move-Mailbox」コマンドレットを用いて,ユーザーのメールボックスを移動する例を紹介しよう。コマンド10では,特定のサーバー上のストレージ・グループ間でメールボックスを移動している。

コマンド10●サーバー「E2007J」でメールボックスを移動する(実際には1行で入力する)
Get-Mailbox -Server E2007J |Where {$_.Database -eq "E2007J\Second Storage Group\Mailbox Database"} |Move-Mailbox -TargetDatabase "E2007J\First Storage Group\Mailbox Database"

 2007年内にリリースが予定されている「Exchange Server 2007 Service Pack 1」には,メールボックス・サーバーのデータベースから,ユーザーのメールを .PSTファイルにエクスポートするコマンドレットが実装されるようだ(関連記事:Exchange 2007 SP1には,何を期待できるのか?)既に,Service Pack 1 のBeta 1が「TechNet Plus」や「MSDN」で公開されており,コマンド11のようなコマンドレットが組み込まれていた。

コマンド11●メールボックスを.PSTファイルにエクスポートする
Export-Mailbox -Identity <mailboxUser> -PSTFolderPath <pathToSavePST>

 メールボックスのエクスポートやインポート機能に関しては,「The Microsoft Exchange Team Blog」に掲載されている,「How to Export and Import mailboxes to PST files in Exchange 2007 SP1」という記事をご覧いただきたい。

オリジナルのコマンドレットも組み込める

 PowerShellでは,サード・パーティが開発したオリジナル・コマンドレットも組み込める。サード・パーティ製コマンドレットを使うことで,Exchange管理シェルからメールを送信することも可能になる。

 図15では,「NetCmdlets」というオリジナル・コマンドレットを組み込んでいる。「add-pssnapin」が,オリジナル・コマンドレットを組み込むためのコマンドレットである。NetCmdletsは,開発元の米/n SoftwareのWebサイトから,評価版をダウンロードできる。

図15●Add-PSSnapinで,オリジナル・コマンドレットを組み込む
[画像のクリックで拡大表示]

 NetCmdletsを組み込むと,コマンド12のように,簡単にメールを送信できるようになる。送信したメールの例が図16である。

コマンド12●メールを送信するコマンド(実際には1行で入力する)
Send-Email -Server E2003 -To nishikawa@root.com -From admin@root.com -Message "警告" -Subject "メールボックスの容量が制限値を超えています。"

図16●Send-Emailコマンドレットから送信したメール
[画像のクリックで拡大表示]

Exchange管理シェルを使ったスクリプトの作成

 ここで紹介した,Exchange管理シェルからメールを送信するコマンドレットを使って,「メールボックスがある容量を超えた場合に,ユーザーに警告メールを送信する」という,実際にあり得るシーンを想定したスクリプトを作成してみよう。

 メモ帳を開き,リスト3のようなコマンドレットを入力して,「Over20MBSendEmail.ps1」という名前でファイルを作成する(Exchange管理シェルのスクリプト・ファイルの拡張子は.ps1である)。

リスト3●メールを送信するスクリプト

$Over20MB = Get-MailboxStatistics -Server E2007J |Where {$_.TotalItemSize -gt 20MB} |Measure-Object
Get-MailboxStatistics -Server E2007J |Where {$_.TotalItemSize -gt 20MB} |get-mailbox |Select-Object WindowsEmailAddress |Set-Variable Target
For($i=0;$i -le $Over20MB.count-1; $i++) {Send-Email -Server E2003 -To $Target[$i].WindowsEmailAddress -From admin@root.com -Message "警告" -Subject "メールボックスの容量が制限値を超えています。"}

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

 Exchange管理シェルで「.\Over20MBSendEmail.ps1」と入力すると,図17のような結果を得られ,20Mバイトを超えたユーザーにメールを送信できたことがお分かりいただけるだろう。なお,シェル・スクリプトを実行するには,完全なパスを指定するか,またはファイル名の前に「.\」というプレフィックスを付ける必要がある。

図17●スクリプトを使った警告メールの送信結果
[画像のクリックで拡大表示]

 既存のコマンド環境である「Cmd.exe」(コマンド・プロンプト)からシェルを実行するには,図18のように入力する。 コマンド13は,それをテキストにしたものだ。

コマンド13●コマンド・プロンプトからPowerShellを実行する(実際には1行で入力する)
PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.psc1" -Command ". 'C:\Over20MBSendEmail3.ps1'"

図18●コマンド・プロンプトからPowerShellを実行した画面
[画像のクリックで拡大表示]

Exchange管理シェルを使用した監視

 Exchange管理シェルのコマンドレットには,Exchange Serverが正常に機能しているかチェックするためのものも用意されている。たとえば,MAPIプロトコルでメールボックスへの接続が正しく行われるか調べるには,「Test-MapConnectivity」コマンドレットを使用する。実際のサーバー監視で使用する場合は,管理用の端末から実行することが多いだろう。そこで,Microsoftでは,32ビット版の「Exchange Management Tool」を提供している。

 では,上記のツールをWindows XP SP2にインストールしてみよう。ダウンロードしたファイルを展開してセットアップを実行すると,製品版と同様に「サーバーの役割の選択」画面が表示される。そこで「管理ツール」にチェックを入れてセットアップを進めると,図19のように「Exchange Server ヘルプ」,「Exchange 管理コンソール」および「Exchange 管理シェル」がインストールされる。

図19●Windows XP SP2に「Exchange Server 2007 Management Tool」をインストール
[画像のクリックで拡大表示]

 次に,「Exchange 管理シェル」を起動して,コマンド14を実行してみることにする。

コマンド14●MAPIプロトコルでメールボックスへ接続できるかチェックする
Test-MapiConnectivity -Server E2007J

 ストア・データベースが正常にマウントされている場合は,図20のような結果が返される。一方,データベースのマウントを解除すると,図21のようなエラーが表示される。

図20●ストア・データベースへの接続テストが成功した画面
[画像のクリックで拡大表示]

図21●ストア。データベースへの接続テストが失敗した画面
[画像のクリックで拡大表示]

 このように,Exchange管理シェルのコマンドレットを組み合わせることで,メールボックスなどのオブジェクトの操作や,スクリプトを使った管理の自動化,データベースの接続テストなど,Exchangeの運用管理に必要な操作が可能となる。

 最後に,コマンドレットを使用する際には,必ず実行結果をファイルに出力することをお勧めしたい。図22のように,Start-Transcriptコマンドレットをスクリプトの最初に記述することで,各コマンドレットの実行履歴と結果をファイルに残すことが可能である。

図22●Sart-Transcriptコマンドレットによるログの出力
[画像のクリックで拡大表示]

 下記に挙げたマイクロソフトが公開するPowerShellのWebサイトなどを参照いただきながら,PowerShellの特徴を活かしたExchangeの構築や運用管理を工夫していただきたい。


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