ユーザー定義変数

 

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

トピックの最終更新日: 2006-09-21

変数は情報を格納する場所です。多くのプログラミング環境とは異なり、Exchange 管理シェルでは、変数を使用する前に宣言する必要はありません。

文字列の前にドル記号 ($) を追加することによって変数であることを指定します。文字列にスペースやその他の特殊文字が含まれている場合は、文字列を波かっこ ({ }) で囲む必要があります。配列参照表記法 ([ ]) を使用して、配列またはハッシュ テーブル変数の要素を指定できます。

配列の詳細については、「配列」を参照してください。

変数を使用して値を格納する

変数は値を格納する場合に便利です。変数に値を代入するには、代入演算子を使用します。演算子の詳細については、「構文」を参照してください。

たとえば、値 8 を変数 $Example に代入するには、次のコマンドを使用します。

$Example = 8

このコマンドは、整数 8 を変数 $Example に代入します。後で別のコマンドでこの $Example 変数を呼び出して、この値を呼び出すことができます。変数で指定された値は、変数に含まれている値が変数で指定された場所に入力された場合と同様に処理されます。たとえば、次の 2 つのコマンドで、$Example2 に値 "Hello" が代入された場合、この 2 つのコマンドは同じになります。

Write-Host $Example2
Write-Host "Hello"

コマンドの出力を変数に格納する

コマンドの出力を変数に格納して、後で使用することもできます。コマンドを変数に代入すると、コマンドの実行時にコマンドが評価されます。コマンドの出力が変数に代入されます。たとえば、コマンド ラインで $CurrentDate = Get-Date を実行した後、何秒間かにわたって繰り返し $CurrentDate を呼び出した場合、報告される値はこの変数をいつ呼び出しても同じです。

コマンドの出力を変数に代入する場合、基になるオブジェクトのプロパティとメソッドにもアクセスできます。たとえば、Get-Date$CurrentDate に代入したときに使用できるプロパティとメソッドを表示するには、$CurrentDate | Get-Member コマンドを使用できます。$CurrentDate | Get-Member コマンドを実行すると、次のプロパティの一覧が返されます。

Date                 Property       System.DateTime Date {get;}
Day                  Property       System.Int32 Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       System.Int32 DayOfYear {get;}
Hour                 Property       System.Int32 Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       System.Int32 Millisecond {get;}
Minute               Property       System.Int32 Minute {get;}
Month                Property       System.Int32 Month {get;}
Second               Property       System.Int32 Second {get;}
Ticks                Property       System.Int64 Ticks {get;}
TimeOfDay            Property       System.TimeSpan TimeOfDay {get;}
Year                 Property       System.Int32 Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ($this.Di...

これらのプロパティのいずれかを呼び出すには、変数、ピリオド (.)、および表示するプロパティを入力します。たとえば、変数に格納されている年を表示するには、次のコマンドを使用します。

$CurrentDate.Year

変数のプロパティにアクセスすることにより、テキストの解析を使用せずに、変数に格納されている情報の一部を操作したり、使ったりすることができます。

Dir コマンドの出力を変数に格納する

Dir コマンドの出力を変数に格納することもできます。Dir コマンドを実行すると複数の行が返されるので、返された各行は新しい配列要素として変数に格納されます。新規作成された配列に格納された各ファイル オブジェクトにアクセスすることができます。配列の詳細については、「配列」を参照してください。

次のコマンドは、Dir コマンドの出力を $DirOutput 変数に代入します。

$DirOutput = Dir

次のように表示する配列のインデックスを指定して、特定のファイル オブジェクトを選択することができます。

$DirOutput[1].Name

または、次のように、単純なループを作成し、配列全体を順に処理して配列に格納されている各ファイルの名前とファイル サイズを表示することもできます。

0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

次の一覧はこの例の説明です。

  • 0..$DirOutput.Length コマンドは、0 から $DirOutput 変数に格納されている配列の最大長までの整数を出力するように Exchange 管理シェルに指示します。

  • 0..$DirOutput.Length コマンドの出力は ForEach コマンドにパイプ処理され、配列の最後に到達するまで配列の各要素をループ処理します。ForEach コマンドは、波かっこ { } で囲まれたコマンドを実行します。

  • 変数 $_ は、パイプラインにある現在のオブジェクトを格納します。この場合、パイプラインにあるオブジェクトは 0..$DirOutput.Length コマンドによって生成された整数で、0 から配列の最大長までカウントします。この変数を $DirOutput[$_].Name コマンドと $DirOutput[$_].Length コマンドで使用して、アクセスする配列の要素を選択します。

  • $_ 変数の詳細については、「シェル変数」を参照してください。

  • 正符号 "+" は、$DirOutput[$_].Name コマンドと $DirOutput[$_].Length コマンドの各出力を、指定した文字列と連結し、次のような出力を作成します。

    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

これらの例では、Length プロパティを複数回使用して、同じ変数について異なる情報を表示する方法を示しています。この方法が可能であるのは、複数の種類のデータを $DirOutput 変数に格納できるからです。最初のデータの種類はディレクトリ オブジェクト自体であり、2 つ目のデータの種類はファイル オブジェクトです。配列のインデックスを指定せずに $DirObject.Length コマンドを実行する場合、配列に格納されている親のディレクトリ オブジェクトにアクセスします。$DirObject[5].Length などの配列のインデックスを指定した場合は、ディレクトリ オブジェクトに格納されている子のファイル オブジェクトにアクセスします。

この動作は多くのオブジェクトに存在しています。一般的に、1 つの変数に格納されている多くのレベルのオブジェクト データにアクセスできます。このデータにアクセスできることによって、Exchange 管理シェルを柔軟に使用することができます。

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