about_Assignment_Operators

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

在此插入簡介。

主題

about_assignment_operators

簡短描述

描述如何使用運算子將值指派給變數。

詳細描述

指派運算子會將一或多個值指派給變數。他們可以在指派之前對值執行數值運算。

Windows PowerShell® 支援下列指派運算子。

    Operator  Description  
    -------   -----------
    =         Sets the value of a variable to the specified value.

    +=        Increases the value of a variable by the specified value, or 
              appends the specified value to the existing value.

    -=        Decreases the value of a variable by the specified value.
 
    *=        Multiplies the value of a variable by the specified value, or
              appends the specified value to the existing value.
 
    /=        Divides the value of a variable by the specified value.
 
    %=        Divides the value of a variable by the specified value and 
              then assigns the remainder (modulus) to the variable.

    ++        Increases the value of a variable, assignable property, or 
              array element by 1.

    --        Decreases the value of a variable, assignable property, or 
              array element by 1.

語法

指派運算子的語法如下所示:

<assignable-expression> <assignment-operator> <value>

指派運算式包含變數和屬性。值可以是單一值、值陣列,或命令、運算式或陳述式。

遞增和遞減運算子是一元運算子。每個運算子都有前置和後置版本。

        <assignable-expression><operator>
        <operator><assignable-expression>

指派運算式必須是數字或必須將其轉換成數字。

指派值

變數是儲存值的具名記憶體空間。您使用指派運算子 (=) 將值儲存在變數中。新的值可以取代變數的現有值,或是您可以將新值附加至現有值。

基本指派運算子為等號 (=) (ASCII 61)。例如,下列陳述式會將值 Windows PowerShell 指派給 $MyShell 變數:

        $MyShell = "Windows PowerShell" 

當您在 Windows PowerShell 中將值指派給變數時,如果變數尚未存在,系統就會將其建立。例如,下列兩個指派陳述式中的第一個會建立 $a 變數,並且將 6 的值指派給 $a。第二個指派陳述式會將 12 的值指派給 $a。第一個陳述式會建立新的變數。第二個陳述式只會變更它的值:

        $a = 6
        $a = 12

除非您將 Windows PowerShell 中的變數加以轉換,否則他們沒有特定資料類型。當變數只包含一個物件時,變數會接受該物件的資料類型。當變數包含物件的集合時,變數會具有 System.Object 資料類型。因此,您可以將任何類型的物件指派給集合。下列範例顯示您可以將處理物件、服務物件、字串和整數新增至變數而不會產生錯誤:

        $a = get-process
        $a += get-service
        $a += "string"
        $a += 12

因為指派運算子 (=) 的優先順序較管線運算子 (|) 來得低,所以將命令管線的結果指派給變數時不需要括號。例如,下列命令會排序電腦上的服務,然後將已排序的服務指派給 $a 變數:

        $a = get-service | sort name

您也可以將陳述式建立的值指派給變數,如下列範例所示:

        $a = if ($b -lt 0) { 0 } else { $b }

如果 $b 的值小於 0,則此範例會將 0 指派給 $a 變數。如果 $b 的值不小於零,則會將 $b 的值指派給 $a。

指派運算子 (=)

指派運算子 (=) 會將值指派給變數。如果變數已經有值,指派運算子 (=) 會取代值而不會發出警告。

下列陳述式會將整數值 6 指派給 $a 變數:

        $a = 6 

若要將字串值指派給變數,用引號將字串值括起來,如下所示:

        $a = "baseball" 

若要將陣列 (多個值) 指派給變數,請使用逗號分隔值,如下所示:

        $a = "apple", "orange", "lemon", "grape"

若要將雜湊表指派給變數,請使用 Windows PowerShell 中的標準雜湊表標記法。輸入 at 符號 (@),後面接著以分號 (;) 分隔的索引鍵/值組,並且以大括號 ({}) 括住。例如,若要將雜湊表指派給 $a 變數,請輸入:

        $a = @{one=1; two=2; three=3} 

若要將十六進位值指派給變數,在值前面加上 "0x"。Windows PowerShell 會將十六進位值 (0x10) 轉換為十進位值 (在此案例中為 16),並且將該值指派給 $a 變數。例如,若要將 0x10 值指派給 $a 變數,請輸入:

        $a = 0x10 

若要將指數值指派給變數,請輸入根數、字母 "e" 和表示 10 的倍數的數字。例如,若要將 3.1415 的 1000 次方的值指派給 $a 變數,請輸入:

        $a = 3.1415e3 

Windows PowerShell 也可以將 KB、MB 和 GB 轉換為位元組。例如,若要將值 10 KB 指派給 $a 變數,請輸入:

        $a = 10kb

加法指派運算子 (+=)

加法指派運算子 (+=) 會遞增變數的值或將指定值附加至現有值。動作取決於變數具有數值或字串類型,和變數包含單一值 (純量) 或多個值 (集合)。

+= 運算子結合兩項作業。首先,它會新增,然後指派。因此,下列陳述式是相等的:

        $a += 2
        $a = ($a + 2)

當變數包含單一數值時,+= 運算子會將運算子右邊的數量加入至現有值。然後,運算子會將產生的值指派給變數。下列範例顯示如何使用 += 運算子來增加變數的值:

        C:\PS> $a = 4
        C:\PS> $a += 2
        C:\PS> $a
        6

變數值是字串時,運算子右邊的值會附加到字串,如下所示:

        C:\PS> $a = "Windows"
        C:\PS> $a += " PowerShell"
        C:\PS> $a
        Windows PowerShell 

變數值是陣列時,+= 運算子會將運算子右邊的值附加到陣列。除非陣列已藉由轉換明確定型,否則您可以將任何類型的值附加到陣列,如下所示:

        C:\PS> $a = 1,2,3
        C:\PS> $a += 2
        C:\PS> $a
        1
        2
        3
        2
        C:\PS> $a += "String"
        C:\PS> $a
        1
        2
        3
        2
        String

變數值是雜湊表時,+= 運算子會將運算子右邊的值附加到雜湊表。不過,唯一能夠加入雜湊表的類型是另一個雜湊表,故所有其他指派皆會失敗。

例如,下列命令會將雜湊表指派給 $a 變數。然後它會使用 += 運算子將另一個雜湊表附加到現有雜湊表,有效地將新的索引鍵/值組新增至現有雜湊表。這個命令會成功,如以下輸出所示:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += @{mode = "write"}
        C:\PS> $a
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        mode                           write
        c                              3

下列命令會嘗試將整數 (1) 附加到 $a 變數中的雜湊表。這個命令會失敗:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<<  1

減法指派運算子 (-=)

減法指派運算子 (-=) 會將變數值減去運算子右邊指定的值。這個運算子不能搭配字串變數使用,且不能用於從集合中移除元素。

-= 運算子結合兩項作業。首先,它會減去,然後指派。因此,下列陳述式是相等的:

        $a -= 2
        $a = ($a - 2)

下列範例顯示如何使用 -= 運算子來減少變數的值:

        C:\PS> $a = 8
        C:\PS> $a -= 2
        C:\PS> $a
        6

您也可以使用 -= 指派運算子來減少數字陣列的成員的值。若要這樣做,請指定您想要變更的陣列元素的索引。在下列範例中,陣列的第三個元素的值 (元素 2) 會減少 1:

        C:\PS> $a = 1,2,3
        C:\PS> $a[2] -= 1.
        C:\PS> $a
        1
        2
        2

您無法使用 -= 運算子來刪除變數的值。若要刪除指派給變數的所有值,使用 Clear-Item 或 Clear-Variable Cmdlet 將 $null 值或 "" 指派給變數。

        $a = $null 

若要從陣列中刪除特定值,使用陣列標記法將 $null 值指派給特定項目。例如,下列陳述式會從陣列中刪除第二個值 (索引位置 1):

        C:\PS> $a = 1,2,3
        C:\PS> $a
        1
        2
        3

        C:\PS> $a[1] = $null
        C:\PS> $a
        1
        3

若要刪除變數,請使用 Remove-Variable Cmdlet。這個方法在變數明確轉換成特定資料類型,且您想要不具類型的變數時很有用。下列命令會刪除 $a 變數:

        remove-variable a

乘法指派運算子 (*=)

乘法指派運算子 (*=) 會乘以數值或加上變數字串值之指定數目。

當變數包含單一數值時,會將該值乘以運算子右邊的值。例如,下列範例示範如何使用 *= 運算子來乘以變數值:

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

在此案例中,*= 運算子結合兩項作業。首先,它會相乘,然後指派。因此,下列陳述式是相等的:

        $a *= 2
        $a = ($a * 2)

當變數包含字串值時,Windows PowerShell 會將指定的字串數附加至值,如下所示:

        C:\PS> $a = "file"
        C:\PS> $a *= 4 
        C:\PS> $a
        filefilefilefile

若要乘以陣列的元素,請使用索引來識別您要相乘的元素。例如,下列命令會將陣列 (索引位置為 0) 中的第一個元素乘以 2:

        $a[0] *= 2

除法指派運算子 (/=)

除法指派運算子 (/=) 會將數值除以運算子右邊的指定值。此運算子不能搭配字串變數使用。

/= 運算子結合兩項作業。首先,它會相除,然後指派。因此,下列兩個陳述式是相等的:

        $a /= 2
        $a = ($a / 2)

例如,下列命令會使用 /= 運算子來除以變數的值:

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

若要除以陣列的元素,請使用索引來識別您要相除的元素。例如,下列命令會將陣列 (索引位置為 1) 中的第二個元素除以 2:

        $a[1] /= 2

模數指派運算子 (%=)

模數指派運算子 (%=) 會將變數的值除以運算子右邊的值。然後,%= 運算子會將餘數 (稱為模數) 指派給變數。您只能在變數包含單一數值時使用這個運算子。當變數包含字串變數或陣列時,您無法使用這個運算子。

%= 運算子結合兩項作業。首先,它會相除並決定餘數,接著將餘數指派給變數。因此,下列陳述式是相等的:

        $a %= 2
        $a = ($a % 2)

下列範例示範如何使用 %= 運算子來儲存商數的模數:

        C:\PS> $a = 7
        C:\PS> $a %= 4
        C:\PS> $a
        3

遞增和遞減運算子

遞增運算子 (++) 會對變數的值增加 1。當您在簡單的陳述式中使用遞增運算子時,不會傳回任何值。若要檢視結果,顯示變數的值,如下所示:

        C:\PS> $a = 7
        C:\PS> ++$a
        C:\PS> $a
        8

若要強制傳回值,以括號括住變數和運算子,如下所示:

        C:\PS> $a = 7
        C:\PS> (++$a)
        8

遞增運算子可以放在變數之前 (前置) 或之後 (後置)。運算子的後置版本會在變數的值用於陳述式之後遞增,如下所示:

        C:\PS> $a = 7
        C:\PS> $c = ++$a
        C:\PS> $a
        8
        C:\PS> $c
        8

運算子的後置版本會在變數的值用於陳述式之後遞增。在下列範例中,$c 和 $a 變數具有不同值,因為值在 $a 變更之前指派給 $c:

        C:\PS> $a = 7
        C:\PS> $c = $a++
        C:\PS> $a
        8
        C:\PS> $c
        7

遞減運算子 (--) 會對變數的值減 1。與遞增運算子一樣,當您在簡單陳述式中使用此運算子時,不會傳回任何值。使用括號來傳回值,如下所示:

        C:\PS> $a = 7
        C:\PS> --$a
        C:\PS> $a
        6
        C:\PS> (--$a)
        5

運算子的前置版本會在變數的值用於陳述式之前遞減,如下所示:

        C:\PS> $a = 7
        C:\PS> $c = --$a
        C:\PS> $a
        6
        C:\PS> $c
        6

運算子的後置版本會在變數的值用於陳述式之後遞減。在下列範例中,$d 和 $a 變數具有不同值,因為值在 $a 變更之前指派給 $d:

        C:\PS> $a = 7
        C:\PS> $d = $a--
        C:\PS> $a
        6
        C:\PS> $d
        7

MICROSOFT .NET FRAMEWORK 類型

根據預設,當變數只有一個值時,指派給變數的值會決定變數的資料類型。例如,下列命令會建立具有整數 (System.Int32) 類型的變數:

        $a = 6 

若要尋找 .NET Framework 類型的變數,使用 GetType 方法和它的 FullName 屬性,如下所示。請務必在 GetType 方法名稱後面加上括號,即使方法呼叫沒有任何引數:

        C:\PS> $a = 6 
        C:\PS> $a.gettype().fullname 
        System.Int32 

若要建立包含字串的變數,將字串值指派給變數。若要指出此值為字串,使用引號將它括起來,如下所示:

        C:\PS> $a = "6"
        C:\PS> $a.gettype().fullname
        System.String

如果指派給變數的第一個值是字串,Windows PowerShell 會將所有作業視為字串作業,並將新值轉換成字串。這會發生在下列範例中:

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

如果第一個值是整數,Windows PowerShell 會將所有作業視為整數作業,並將新值轉換成整數。這會發生在下列範例中:

        C:\PS> $a = 6
        C:\PS> $a += "3"
        C:\PS> $a
        9

您可以將新純量變數轉換為任何 .NET Framework 類型,方法是將類型名稱放在變數名稱或第一個指派值前面的括號中。當您轉換變數時,您可以決定可以儲存在變數中的資料類型。而且,您可以決定在操作變數時,其表現的方式。

例如,下列命令會將變數轉換為字串類型:

        C:\PS> [string]$a = 27
        C:\PS> $a += 3
        C:\PS> $a
        273

下列範例會轉換第一個值,而不是轉換變數:

        $a = [string]27

當您將變數轉換為特定類型時,常見的慣例是轉換變數而不是值。不過,如果現有變數的值無法轉換成新的資料類型,您就無法重新轉換現有變數的資料類型。若要變更資料類型,您必須取代它的值,如下所示:

        C:\PS> $a = "string"
        C:\PS> [int]$a
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

此外,當您在變數名稱之前加上資料類型時,該變數的類型會遭到鎖定,除非您明確指定其他資料類型來覆寫類型。如果您嘗試指派與現有類型不相容的值,且未明確覆寫類型,Windows PowerShell 就會顯示錯誤,如下列範例所示:

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $a = "string"
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:3
        + $a <<<<  = "string"

        C:\PS> [string]$a = "string"

在 Windows PowerShell 中,包含陣列中多個項目的變數的資料類型,其處理方式與包含單一項目的變數的資料類型不同。除非資料類型已特別指派給陣列變數,否則資料類型一律為 System.Object []。此資料類型是陣列的特定項目。

有時候,您可以藉由指定其他類型來覆寫預設類型。例如,下列命令會將變數轉換為 [] 陣列類型:

        [string []] $a = "one", "two", "three"

Windows PowerShell 變數可以是任何 .NET Framework 資料類型。此外,您可以指派目前處理程序中可用的任何完整 .NET Framework 資料類型。例如,下列命令會指定 System.DateTime 資料類型:

        [system.datetime]$a = "5/31/2005"

變數會被指派值,該值符合 System.DateTime 資料類型。$a 變數的值如下:

        Tuesday, May 31, 2005 12:00:00 AM

指派多個變數

在 Windows PowerShell 中,您可以使用單一命令將值指派給多個變數。指派值的第一個元素是指派給第一個變數、第二個元素是指派給第二個變數、第三個元素是指派給第三個變數,依此類推。例如,下列命令將值 1 指派給 $a 變數、值 2 指派給 $b 變數,以及值 3 指派給 $c 變數:

        C:\PS> $a, $b, $c = 1, 2, 3

如果指派值包含的元素比變數多,其餘值都會指派到最後一個變數。例如,下列命令會包含三個變數和五個值:

        $a, $b, $c = 1, 2, 3, 4, 5

因此,Windows PowerShell 會將值 1 指派給 $a 變數,將值 2 指派給 $b 變數。它會將值 3、4 和 5 指派給 $c 變數。若要將 $c 變數中的值指派給其他三個變數,使用下列格式:

        $d, $e, $f = $c

此命令會值 3 指派給 $d 變數、值 4 指派給 $e 變數,以及將值 5 指派給 $f 變數。

您也可以鏈結變數,將單一值指派給多個變數。例如,下列命令會將值 "3" 指派給所有四個變數:

        $a = $b = $c = $d = "three"

變數相關 CMDLET

除了使用指派作業來設定變數值,您也可以使用 Set-Variable Cmdlet。例如,下列命令會使用 Set-Variable 將 1、2、3 的陣列指派給 $a 變數。

        Set-Variable -name a -value 1, 2, 3 

另請參閱

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable