使用者定義的變數

 

適用版本: 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 變數,來回收該值。以變數指定的值會當做其包含的值已輸入到指定之變數位置一樣來處理。例如,如果 $Example2 已指定 "Hello" 這個值,則下列兩個命令是一樣的:

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 命令會指示 Exchange 管理命令介面,將來自 0 的整數輸出至 $DirOutput 變數所儲存之陣列的最大長度。

  • 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 變數中的資料類型不止一種。第一種資料類型是目錄物件本身,第二種資料類型則是檔案物件。當您執行 $DirObject.Length 命令時,不必指定陣列索引,就可以存取儲存在陣列中的目錄父項物件類型。當您指定陣列索引時 (例如 $DirObject[5].Length),可以存取目錄物件中儲存的檔案子項物件。

此行為存在於許多物件上。通常,您可以存取包含在單一變數中之許多層級的物件資料。存取此資料的能力使 Exchange 管理命令介面很有彈性。