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

 

適用先: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

トピックの最終更新日: 2009-12-18

一般的なタスクの多くは、コマンドレットを一度に 1 つずつ実行するか、複数のコマンドレットをパイプラインによって実行することで、適切に処理されます。ただし、タスクを自動化したい場合もあります。Exchange 管理シェルは、Microsoft .NET Framework に基づいて豊富な機能を持つスクリプト言語をサポートしています。このスクリプト言語は、他のシェルのスクリプト言語とよく似ています。Exchange 管理シェルでは、単純なスクリプトから、非常に複雑なスクリプトまで作成することができます。ループ処理、条件分岐、フロー制御、および変数代入のための言語の構成要素はすべてサポートされています。

どのような組織にも、その組織に固有の方法で処理されるタスクがあります。このようなタスクを実行するスクリプト ファイルのライブラリがあれば、管理者は Exchange 管理シェルがインストールされているコンピュータでこれらのスクリプトを実行して、時間を節約することができます。

スクリプトの使用方法の詳細については、Windows PowerShell を使用したスクリプトの作成のページを参照してください (このサイトは英語の場合があります)。Exchange 管理シェルは Microsoft Windows PowerShell テクノロジに基づいて構築されているので、Windows PowerShell のスクリプト作成の指針は Exchange 管理シェルにも当てはまります。

Exchange 管理シェル内部でのスクリプトの実行

Cmd.exe 環境に慣れているユーザーであれば、コマンド シェル スクリプトを実行するのも簡単です。コマンド シェル スクリプトは, .bat というファイル名の拡張子が付けられたテキスト ファイルです。バッチ ファイルと同様に、Exchange 管理シェルのスクリプト ファイルは、メモ帳などのテキスト エディタを使用して作成できます。Exchange 管理シェルのスクリプト ファイルでは, .ps1 というファイル名の拡張子が使用されます。

Exchange 管理シェルでは、スクリプト ファイルが呼び出された場合に、スクリプト ファイルのルート ディレクトリが使用されます。既定では、このルート ディレクトリは <root drive>:\Program Files\Microsoft\Exchange Server\bin ディレクトリです。Exchange 管理シェルを実行しているコンピュータで現在の PSHome ディレクトリを確認するには、コマンド ラインから $PSHome を実行します。これらのディレクトリはいずれも、PATH 環境変数で設定されます。

スクリプト ファイルがルート ディレクトリに保存されている場合は、スクリプト名を使用してスクリプトを呼び出すことができます。スクリプト ファイルが現在の場所とは異なる場所にある場合は、パスとスクリプト名を使用する必要があります。スクリプト ファイルが現在の場所にある場合は、スクリプト名の前に .\ というプレフィックスを付ける必要があります。

次の例では、3 つの異なるスクリプトを呼び出すためのコマンド構文の要件を示しています。これらの例では、3 つの異なる場所から Get-Date コマンドレットを使用しています。

[PS] C:\>Get-Date-Script-A.ps1
Friday, January 20, 2006 3:13:01 PM

スクリプト ファイル Get-Date-Script-A.ps1$PSHhome で指定されたディレクトリにあるので、実行するにはスクリプト名のみが必要です。

[PS] C:\>c:\workingfolder\Get-Date-Script-B.ps1
Friday, January 20, 2006 3:13:25 PM

スクリプト ファイル Get-Date-Script-B.ps1C:\workingfolder ディレクトリにあるので、実行するには完全なパスを指定する必要があります。

[PS] C:\>.\Get-Date-Script-C.ps1
Friday, January 20, 2006 3:13:40 PM

スクリプト ファイル Get-Date-Script-C.ps1 は現在の場所である C:\ にあります。したがって、実行するには、プレフィックス .\ を付ける必要があります。

[PS] C:\>Get-Date-Script-C.ps1
'Get-Date-Script-C.ps1' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:21
+ Get-Date-Script-C.ps1 <<<<

最後の例は、この同じスクリプト Get-Date-Script-C.ps1, を、プレフィックス .\ を付けずに呼び出した場合に返される結果を示しています。

スクリプト ファイルにはわかりやすい名前を付け、スクリプト内にコメントを挿入してスクリプトの目的や重要なポイントを記述することをお勧めします。スクリプトを実行するユーザーが使用方法に関する疑問を解決するために、作成者に関する情報も含めておく必要があります。スクリプトの本文内でコメント行を開始するには、シャープ記号 (#) を使用します。

Cmd.exe からのスクリプトの実行

Windows タスク スケジューラ サービスを使用して定期的にスクリプトを実行する場合は、Exchange 管理シェルを呼び出して、実行するスクリプトをパラメータとして含めることができます。Exchange 管理シェルは Windows PowerShell のスナップインなので、Exchange 関連のコマンドレットを実行するためにコマンドを実行する場合は、Exchange 管理シェルも読み込む必要があります。Exchange 管理シェル スナップインを読み込んで、Cmd.exe コマンドからスクリプトを実行するには、次の構文を使用します。

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". '<Path to Your Script>'"

たとえば、C:\My Scripts からスクリプト RetrieveMailboxes.ps1 を実行するには、次のコマンドを実行します。

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". 'C:\My Scripts\RetrieveMailboxes.ps1'"

Cmd.exe から Exchange 管理シェルを呼び出すときに使用するその他のオプションについては、PowerShell.exe /? を実行して表示されるヘルプを参照してください。

Exchange 管理コンソールからのヒントの取得

Microsoft Exchange Server 2007 では、Exchange 管理コンソールを使用して、特定のタスクを実行するために使用された特定の Exchange 管理シェル コマンドに関する詳細情報を表示できます。Exchange 管理コンソールでウィザードを実行すると、ユーザーが入力した情報がウィザードによって取得され、コンピュータで実行される Exchange 管理シェル コマンドが作成されます。このコマンドをコピーして、直接 Exchange 管理シェルに貼り付けることも、テキスト エディタに貼り付けて編集することもできます。Exchange 管理コンソールでどのようにコマンドが作成されるかを調べることによって、将来のニーズに合わせてコマンドを作成または変更する方法についての理解を深めることができます。

たとえば、Frank Lee という名前のユーザーについて新しいメールボックスを作成すると、メールボックスの新規作成ウィザードの [完了] ページに次の情報が表示されます。

[メールボックスの新規作成完了] ページ

[完了] ページに表示される情報によって、Exchange 管理シェルで同様のコマンドを実行した場合に、コマンドを正常に完了するために必要な情報を理解することができます。[完了] ページでは、Ctrl キーを押しながら C キーを押すことによってこの情報をクリップボードにコピーできます。次に、テキスト エディタを使用してコマンドを確認して、複数のメールボックスを追加する場合に変更が必要な内容を判断できます。また、コマンドをカスタマイズして、コンマ区切り (CSV) ファイルやその他の入力ソースを使用するスクリプトの一部として使用し、複数のメールボックスの作成を自動化することもできます。

スクリプトのテスト

新しいスクリプトを作成したら、常にテスト環境でスクリプトをテストしてから、運用環境に適用してください。テスト環境でスクリプトをテストするときや、運用環境でスクリプトを展開するときには、Exchange 管理シェルに含まれる多くのコマンドレットで利用できる WhatIf パラメータを使用して、スクリプトが期待どおりに実行されることを確認できます。WhatIf パラメータを指定した場合、コマンドは実行されますが、コマンドの実行による影響を受けるオブジェクトと、それらのオブジェクトに対する変更内容が表示されるだけで、実際にはオブジェクトは何も変更されません。

WhatIf パラメータの詳細については、「WhatIf、Confirm、および ValidateOnly パラメータ」を参照してください。

スクリプトのトラブルシューティング

スクリプトが期待どおりに動作しない場合、多くの理由が考えられます。問題の発生箇所や影響を特定することが困難な場合があります。Exchange 管理シェルでは、エラーのある行や文字がレポートされ、一般的な構文エラーを特定することができます。スクリプトの構文が正しいにもかかわらず、スクリプトの動作が期待どおりではない場合は、問題の診断がさらに困難になります。Exchange 管理シェルには、スクリプト実行時の各ステップを調べることによってスクリプト ファイルのトラブルシューティングを行う、簡単なデバッグ機能が含まれています。この機能をトレースと呼びます。

トレースを有効にして、スクリプト内の各コマンドのステップを調べるには、Trace パラメータの値を 1 に設定して Set-PSDebug コマンドレットを使用します。各ステップと各変数の代入を調べるには、Trace パラメータの値を 2 に設定します。トレースをオフにするには、Trace パラメータの値を 0 (ゼロ) に設定します。

スクリプト内の各コマンドを 1 行ずつ調べるには、Step パラメータを指定して Set-PSDebug コマンドレットを使用します。各ステップで、操作を続行するかどうかを確認するメッセージが表示されます。Step モードでは、以下の選択肢のいずれかを選択できます。

[Y] Yes (continue to the next step)
[A] Yes to All (continue to the end of the script)
[N] No (stop this step)
[L] No to All (stop all remaining steps)
[S] Suspend (suspend at this point and drop to a prompt)

Suspend を選択すると、任意のコマンドを実行できるプロンプトが表示され、スクリプトがアクセスする前にオブジェクトの値を確認したり、設定したりすることができます。スクリプトの実行を再開する準備ができたら、「Exit」と入力すると、スクリプトの実行を中断した箇所に直ちに制御が戻ります。

参照している情報が最新であることを確認したり、他の Exchange Server 2007 ドキュメントを見つけたりするには、Exchange Server TechCenter を参照してください。