Exchange Server 2007

Exchange 管理シェルでのコマンドの実行

David Strome

 

概要:

  • Exchange 管理シェルのしくみ
  • コマンドレットの使用法
  • コマンドレットとコマンドの比較

Exchange 環境を管理する場合、次期 Exchange Server 2007 には Exchange 管理シェルと呼ばれる新しいコマンドライン インターフェイスが含まれていることを耳にしていると思います。

Exchange 管理シェルは Microsoft Windows PowerShell テクノロジを基盤として構築され、Exchange Server 2007 のすべての側面をコマンド ラインから管理するために使用できる、強力な管理インターフェイスです。ここでは、コマンド ラインから、Exchange 管理シェルと直接対話操作を実行したり、自動化のためのスクリプトを記述したり、アプリケーションを基になるエンジンと統合したりできます。図 1 に、Exchange 管理シェルの実際の使用例を示します。

図 1 Exchange 管理シェル

図 1** Exchange 管理シェル **(画像を拡大するには、ここをクリックします)

Exchange 管理コンソールでは、操作の実行に Exchange 管理シェルを使用するだけではありません。ウィザードを使用して、実行するコマンドを示すこともできます。ウィザードで作成したコマンドをコピーして、コマンド ラインまたはスクリプトに直接貼り付けます。パラメータを自由に変更した後、WhatIf パラメータを使用してスクリプトまたはコマンドをテストします。これにより、環境に変更を加える前に結果を表示することができます。

Exchange 管理シェルでは、現在のスクリプト ソリューションに統合される堅牢で柔軟性のあるスクリプト プラットフォームが提供されます。また、COM や Windows Management Instrumentation (WMI) などのデータ ソースとネイティブに通信することができます。Exchange 管理シェルは .NET Framework に基づいており、コマンドレット (Exchange 管理シェル内の機能の最小単位) を使用して、テキスト形式ではなく構造化されたデータを受け取って返します。コマンドレットの詳細については、この後すぐに説明します。

Windows PowerShell スナップイン

Exchange 管理シェルを理解するには、まず、Exchange 管理シェルが Windows PowerShell™ にどのように関連しているかを調べます。Windows PowerShell は、.NET Framework に基づいた、強力で柔軟性のある新しいコマンドライン インターフェイスです。Windows PowerShell は、他のシェルの最も優れたいくつかの機能と組み合わせたもので、新しい機能も数多く追加されています。Windows PowerShell は、他のアプリケーションのホストになるようにデザインされています。これは、Microsoft 管理コンソール (MMC) が、アプリケーションと共に提供されるさまざまなスナップインのホストとして動作するのと同じです。Exchange 管理シェルは、Windows PowerShell の最初のスナップインとしてリリースされます。

スナップインとは、アプリケーションや主要コンポーネントの管理に使用するコマンドレットの集まりです。スナップインは、最初に読み込んでおかないと使用できません。さいわい、Exchange 管理シェル スナップインは、きわめて簡単に起動できます。ただし、起動方法を説明する前に、Exchange 管理シェルを使用する際に理解しておく必要がある主要概念を説明します。

コマンドレット : コマンドレットは、他のシェル内の組み込みコマンド (cmd.exe の dir コマンドなど) に似ています。これらの一般的なコマンドと同様に、コマンドレットは Exchange 管理シェル内のコマンド ラインから直接呼び出すことができ、個別のプロセスとしてではなく、シェルのコンテキストで実行されます。他のシェル内のコマンドとは異なり、コマンドレットには動詞と名詞を組み合わせたわかりやすい名前が付けられています。動詞の部分はコマンドレットが実行する処理を表し、名詞の部分は処理の対象となるコンポーネントまたは機能を表します。

これにより、各コマンドレットがどのような処理を行うかに悩む必要がありません。Move-Mailbox コマンドレットを見れば、これが何に使用されるか正確にわかります。

通常のコマンドとコマンドレットの違いについては、Windows® SDK の Windows PowerShell セクションにある補足記事の「Cmdlets vs. Commands」(windowssdk.msdn.microsoft.com/en-us/library/ms714395.aspx) (英語) を参照してください。

Identity パラメータと位置パラメータ : Identity パラメータは、ほとんどの Exchange 関連のコマンドレットで使用できます。このパラメータを使用すると、Exchange Server 2007 の特定のオブジェクトを表す一意識別子にアクセスできます。これにより、最適な一意値を使用して、特定の Exchange オブジェクトに対する処理を実行できます。

Identity パラメータは、他のパラメータからの値のコレクションです。これらの値はオブジェクト セットの中で一意であることが保証されています。ユーザーは、Name や DistriguishedName など、他のパラメータの値を指定できます。または、GUID のようにシステム生成の値にすることもできます。使用する追加パラメータ (該当する場合) およびその設定方法は、参照するオブジェクトによって異なります。

また、Identity パラメータは、位置パラメータとも考えられます。位置パラメータとは、パラメータの名前を指定しないで値を指定できるパラメータです。Parameter Position 属性が整数の場合、パラメータは位置パラメータです。この整数は、コマンドレットがパラメータの値を見つけることができるコマンド ライン上の位置を示します。Identity は、先頭位置 0 に存在する位置パラメータなので、この位置に入力されるパラメータ名なしのすべての値は、Identity パラメータの値と見なされます。これにより、コマンドを入力するときにキー入力の回数が減ります。たとえば、次のような記述があるとします。

Get-Mailbox –Identity "Kim Akers" 

これは、次のように記述しても、同じ処理が実行されます。

Get-Mailbox "Kim Akers"

パイプライン処理 : Exchange 管理シェルのパイプライン処理とは、あるコマンドレットで操作を実行するときに、別のコマンドレットの出力を使用することです。パイプライン処理は、パイプ記号 "|" を使用して実現します。同じ名詞コマンドレット セットのすべての動詞は、別のコマンドからパイプライン処理をとおして渡された情報を使用できます。一部の名詞コマンドレット セットでは、パイプラインをとおして別の名詞コマンドレット セットにデータを渡すこともできます。

パイプライン処理を使用して 2 つ以上のコマンドレットの操作を結合すると、小さなコンポーネントを組み合わせることで、より強力な処理を実行できます。たとえば、あるコマンドレットを使用してデータを収集します。次に、そのデータを 2 番目のコマンドレットに渡し、データにフィルタを適用してサブセットに分類します。さらに、そのデータを 3 番目のコマンドレットに渡してサブセットのみを処理します。

Exchange 管理シェルの起動

シェルを読み込む最も簡単な方法は、[スタート] ボタンをクリックし、[プログラム] をポイントして、[Microsoft Exchange Server 2007]、[Exchange 管理シェル] の順にクリックする方法です。

Exchange 管理シェル スナップインを読み込む 2 つ目の方法は、Windows PowerShell セッションから手動で行う方法です。[スタート] ボタンをクリックし、[プログラム] をポイントします。次に、[Windows PowerShell] をクリックします。起動したら、次のコマンドを実行して Exchange 管理シェルを読み込みます。

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

[プログラム] メニューのエントリを使用して Exchange 管理シェル スナップインを読み込む方法は、Add-PSSnapin コマンドレットを使用してこのスナップインを手動で起動する方法とはやや異なります。[プログラム] メニューのエントリを使用するときは、Exchange 管理シェル スナップインを読み込むだけでなく、Windows PowerShell スクリプトを実行してカスタマイズされた Exchange 管理環境が設定されます。Exchange 管理シェルを手動で読み込んだ後に同様の管理環境を設定する場合は、インストールされた Exchange の bin ディレクトリ (C:\Program Files\Microsoft\Exchange Server\Bin など) に変更を加えてください。その後、次のコマンドを実行します。

.\Exchange.ps1

Exchange.ps1 スクリプトを見て、ニーズを満たすように Windows PowerShell 環境をカスタマイズする方法を確認してください。Exchange 管理シェルを読み込むと、図 2 のような画面が表示されます。

図 2 Exchange 管理シェルのようこそ画面

図 2** Exchange 管理シェルのようこそ画面 **(画像を拡大するには、ここをクリックします)

手始めに

Exchange 管理シェルにはコマンドレットが多数あるため、Get-Help コマンドレットと Exchange Server 2007 のヘルプ ファイルは貴重な資料になります。Exchange Server 2007 ヘルプ ファイルの「操作」には、ほとんどの管理作業の実行手順が記載されています。

「Get-Help」とだけ入力すると、ヘルプ項目を参照するための一般的なヘルプ情報が表示されます。特定のコマンドレットに関するヘルプを参照するには、「Get-Help」の後に情報が必要なコマンドレットを入力します。Detailed、Full、および Example の各パラメータを使用して、表示される情報を制御できます。これらのパラメータは、コマンドの最後に追加するだけです。たとえば、「Get-Help cmdlet name –Full」と入力すると、指定したコマンドレットについて提供できるすべてのヘルプ セクションを返します。**

コマンドレットの 1 つまたは複数の特定のパラメータに関する情報を取得する場合は、Get-Help と共に Parameters パラメータを使用できます。つまり、Set-Mailbox コマンドレットの "quota" という語が含まれるすべてのパラメータとその説明を表示する場合は、次のコマンドを使用します。

Get-Help Set-Mailbox –Parameter *quota*

特定の役割のサーバーまたはコンポーネント機能を管理するコマンドレット、または機能の特定のスコープ全体のオブジェクトに影響するコマンドレットの一覧を表示することもできます。Get-Help コマンドレットでは、Role、Component、および Functionality の 3 つのパラメータを指定して処理を実行できます。これらのパラメータを指定して Get-Help コマンドレットを使用するときは、これらのパラメータに指定する値をワイルドカード文字 "*" で囲む必要があります。各パラメータを使用して Get-Help を呼び出す方法の例を次に示します。

Get-Help -Role *Mailbox*
Get-Help -Component *Recipient*
Get-Help -Functionality *Server*

詳細については、Exchange Server 2007 ヘルプ ファイルの「ヘルプについて」で、使用できる役割、コンポーネント、および機能の値の一覧を参照してください。

コマンド出力の書式設定

Exchange 管理シェルの既定では、出力が画面に表示されるときは、各オブジェクトに使用できるプロパティのサブセットのみが表示されます。ただし、コマンドの出力を Format-List、Format-Table、および Format-Wide の書式設定コマンドレットにパイプすることで、すべてのプロパティに簡単にアクセスできます。おそらく通常は Format-List と Format-Table を使用することになるため、これらについて具体的に説明します。

Format-List コマンドレットは、パイプラインから入力を受け取り、各オブジェクトの指定されたすべてのプロパティの一覧を縦に並べた列で出力します。Property パラメータを使用して、表示するプロパティを指定できます (Property パラメータは位置パラメータなので、パラメータ名を指定する必要はなく、値だけを指定できます)。パラメータを指定しないで Format-List コマンドレットを呼び出すと、すべてのプロパティが出力されます。このコマンドレットでは、行は切り捨てられずに、折り返されます。Format-List コマンドレットの最適な使用方法の 1 つは、コマンドレットの既定の出力を変更して、追加情報や目的を絞った情報を取得できるようにすることです。たとえば、次のように記述します。

Get-DistributionGroup | Format-List Name, *OnlyFrom, 
PrimarySmtpAddress, *Size*

図 3 に、このコマンドの出力を示します。

図 3 Format-List の出力例

図 3** Format-List の出力例 **(画像を拡大するには、ここをクリックします)

Format-Table コマンドレットでは、ラベル ヘッダーとプロパティ データの列を備えた表形式で項目が表示されます。既定では、Get-Mailbox や Get-JournalRule などの多くのコマンドレットが出力に表形式を使用します。Format-Table コマンドレットのパラメータには、Properties パラメータと GroupBy パラメータがあります。これらのパラメータは、Format-List コマンドレットの場合とまったく同じように機能します。プロパティ情報が長い行になる場合でも、行の最後が切り捨てられることなく完全に表示されるようにするには、次のように Wrap パラメータを使用します。

Get-Mailbox –Database Research | Format-Table Name, 
ProhibitSendQuota, Database –Wrap 

図 4 に、出力結果を示します。

図 4 Format-Table の出力例

図 4** Format-Table の出力例 **(画像を拡大するには、ここをクリックします)

ワイルドカード文字を使用すると、各プロパティ名を個別に入力しなくても、一致する複数のプロパティを出力できます。たとえば、次のように記述すると、"E-mail" で始まるすべてのプロパティが返されます。

Get-Mailbox | Format-List Email* 

実践

これで基本的なコマンドがいくつか身に付いたので、次の例を実行してみましょう。これらの例によって、Exchange 管理シェルは強力で柔軟性が高く、実用的であることが明らかになります。

最初に試すコマンドでは、User1 ~ User10 の 10 人のユーザーを作成します。

1..10 | ForEach { Net User "User$_" MyPassword=01 /ADD 
/Domain; Enable-Mailbox "User$_" -Database "Mailbox 
Database" }

これを細かく分けて考えてみましょう。コマンド 1..10 で整数 1 ~ 10 を出力し、これらの整数をパイプラインをとおして ForEach コマンドレットに渡します。ForEach コマンドレットは、受け取った値で各オブジェクトを処理し、オブジェクトごとに {} 内のコマンドを実行します。Net User コマンドでは新しいドメイン ユーザーを作成し、Enable-Mailbox コマンドレットではローカル サーバー上の "メールボックス データベース" 内に新しいメールボックスを作成します。2 つのコマンドをセミコロンで区切って、同じコマンド ラインに配置することができます。変数 $_ は、パイプライン内の現在のオブジェクトの値を含む特殊な変数です。この例では、変数 $_ にはパイプラインに現在存在する整数が含まれます。

次の例では、サーバー MBX に存在するメールボックスを表示し、各メールボックスの Name、Database、および quota の各プロパティを返すことができます。

Get-Mailbox –Server MBX | Format-Table 
Name,Database,*quota*

Get-Mailbox コマンドレットによって、Server パラメータに指定されたサーバー上にある各メールボックスが返され、各メールボックス オブジェクトの出力が Format-Table コマンドレットにパイプ出力されます。Format-Table コマンドレットの既定では、表示するプロパティを指定しないと、コマンドレットから返されるすべてのプロパティを表示します。ここでは、Name プロパティおよび Database プロパティと、文字列 "quota" が含まれるすべてのプロパティが要求されています。このコマンドの出力は 図 5 のようになります。

図 5 Get-Mailbox のコマンド出力

図 5** Get-Mailbox のコマンド出力 **(画像を拡大するには、ここをクリックします)

この例では、タイトルに "Manager" が含まれる、組織全体のすべてのメールが有効なユーザーに対して、送信できるクォータの制限を 600 MB に設定します。

Get-User –Filter { Title –Like "*Manager*"} 
–RecipientTypeDetails UserMailbox | Set-Mailbox 
–ProhibitSendQuota 600MB

Get-User コマンドレットを単独で実行すると、メールが有効ではないユーザーを含めて、Active Directory 内のすべてのユーザー オブジェクトが返されます。Set-Mailbox コマンドレットで使用できるユーザー オブジェクトのセットを取得するには、Get-User コマンドレットに、メールが有効なユーザーである Active Directory ユーザー オブジェクトのみを返すように指示する必要があります。RecipientTypeDetails パラメータには、Active Directory の受信者の種類を指定できます。この場合は UserMailbox を指定しています。次に、メールが有効なユーザーの中からマネージャのセットを取得する必要があります。この例では、各 Active Directory ユーザー オブジェクトの Title プロパティには値が設定されています。この値を使用して、Filter パラメータによってマネージャであるユーザーを判別できます。このパラメータでは、サーバーに、条件を満たす Active Directory オブジェクトのみを返すように指示します。これは、サーバー側のフィルタ処理と呼ばれます。オブジェクトのセットを取得したら、このセットを Set-Mailbox コマンドレットに渡します。これにより、各メールボックスの ProhibitSendQuota プロパティが 600 MB に設定されます。

次に、コマンドの結果をテストして、配布グループのメンバであるすべてのメールボックスを削除します。このコマンドは次のとおりです。

Get-DistributionGroupMember "Fourth Year Students" |
 Where { $_.RecipientType –Eq "UserMailbox" } | Remove-
 Mailbox -WhatIf

最初のコマンドレットでは、Fourth Year Students 配布グループのメンバである受信者オブジェクトを取得しています。次に、RecipientType が "UserMailbox" と一致する受信者オブジェクトのみが、Remove-Mailbox コマンドレットに渡されます。Remove-Mailbox コマンドレットでは、メールボックスを削除するのではなく、実行する処理と処理の対象となるオブジェクトを削除します。Get-DistributionGroupMember コマンドレットでは、"Fourth Year Students" 配布グループのメンバであるすべての受信者オブジェクトの一覧を取得します。ただし、Remove-Mailbox コマンドレットはメールが有効なユーザーにしか機能しないため、"UserMailbox" 以外の全種類の受信者を除外する必要があります。他のコマンドレットとは異なり、Get-DistributionGroupMember コマンドレットには Filter パラメータがありません。つまり、このコマンドレットではサーバー側のフィルタ処理を実行できません。(パフォーマンス上のメリットがないので) サーバー側のフィルタ処理を実行しないコマンドレットでは、Where コマンドレットを使用してクライアント側のフィルタ処理を実行できます。Where コマンドレットは、すべてのオブジェクトを取得してローカル クライアント コンピュータでフィルタ処理を実行します。Where コマンドレットでは、指定した条件に一致するオブジェクトのみを許可します。RecipientType が "UserMailbox" であるオブジェクトが、Remove-Mailbox コマンドレットに送信されます。このコマンドレットにより、Active Directory ユーザー オブジェクトが削除され、メールボックスは削除とマークされます。WhatIf パラメータを使用すると、Remove-Mailbox コマンドレットによって次のようなテキストが表示されます。

What if: Removing the Mailbox "contoso.com/Users
/user10" will remove the Windows user object and mark 
the mailbox in the database for removal.

このコマンドによって予期する処理が実行されることに満足したら、WhatIf を使用せずに再度コマンドを実行します。動詞 Remove などが含まれる特定のコマンドレットでは、変更が加えられる前に、シェルから自動的に確認のメッセージが表示されます。各変更を続行するか、次回から確認のメッセージを表示しないようにシェルに指示するか、この後の処理をキャンセルするかを選択できます。自動的に確認のメッセージが表示されるように実装されていないコマンドレットの場合、Confirm パラメータを使用して強制的に表示されるようにできます。

まとめ

これでコマンドレットのすばらしさをわかっていただけたので、自分で実践してみて、Exchange 管理シェルと Microsoft Windows PowerShell が、どちらも今後のシステム管理作業で大いに役立つことを確かめてください。この 2 つのトピックに関する詳細については、次のリソースを参照してください。管理シェルについては、https://www.microsoft.com/technet/prodtechnol/exchange/E2k7/JA/Help/ExchHelp/726f0073-bfe5-4db0-a02b-9bb8ee16deb1.mspx?mfr=true にある Exchange Server 2007 ヘルプ ファイルを参照してください。Windows Powershell については、go.microsoft.com/fwlink/?LinkId=71134 にあるスクリプト センター (英語) を参照してください。また、msexchangeteam.com にある Exchange チームのブログ (英語) も参照してください。

David Strome は、マイクロソフトの Exchange User Education グループのテクニカル ライターになって 1 年余りです。David は、ワシントン州レドモンドのマイクロソフトに勤務する前は、カナダのブリティッシュ コロンビアのさまざまな企業で、約 10 年間 Exchange Server のインストールの設計、実装、および管理に携わっていました。連絡先は dstrome@microsoft.com (英語のみ) です。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.