關於指派運算符
簡短描述
描述如何使用運算子將值指派給變數。
完整描述
指派運算子會將一或多個值指派給變數。 他們可以在指派之前對值執行數值運算。
PowerShell 支援下列指派運算符。
算子 | 描述 |
---|---|
= | 將變數的值設定為指定的值。 |
+= | 依指定的值增加變數的值,或 |
將指定的值附加至現有的值。 | |
-= | 依指定的值減少變數的值。 |
*= | 將變數的值乘以指定的值,或 |
將指定的值附加至現有的值。 | |
/= | 將變數的值除以指定的值。 |
%= | 將變數的值除以指定的值和 |
然後將餘數 (模數) 指派給 變數。 | |
++ | 增加變數、可指派屬性或 |
array 元素 by 1。 | |
-- | 減少變數、可指派屬性的值,或 |
array 元素 by 1。 |
語法
指派運算符的語法如下所示:
<assignable-expression>
<assignment-operator>
<value>
可指派的表達式包括變數和屬性。 此值可以是單一值、值陣列或命令、運算式或語句。
遞增和遞減運算符是一元運算符。 每個都有前置詞和後置版本。
<assignable-expression><operator>
<operator><assignable-expression>
可指派的運算式必須是數位,或者必須可轉換成數位。
指派值
變數是儲存值的具名記憶體空間。 您可以使用指派運算子 =
,將值儲存在變數中。 新的值可以取代變數的現有值,也可以將新的值附加至現有的值。
基本指派運算子是等號 =
(ASCII 61)
。 例如,下列語句會將值PowerShell指派給 $MyShell
變數:
$MyShell = "PowerShell"
當您在PowerShell中將值指派給變數時,如果變數不存在,就會建立變數。 例如,下列兩個指派語句中的第一個會建立 $a
變數,並將值指派為 6,以 $a
。 第二個指派語句會將 12 的值指派給 $a
。 第一個語句會建立新的變數。 第二個語句只會變更其值:
$a = 6
$a = 12
除非您轉換變數,否則 PowerShell 中的變數沒有特定的數據類型。 當變數只包含一個物件時,變數會採用該物件的數據類型。 當變數包含 物件的集合時,變數具有 System.Object 數據類型。 因此,您可以將任何類型的物件指派給集合。 下列範例顯示您可以將進程對象、服務物件、字串和整數新增至變數,而不會產生錯誤:
$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12
由於指派運算符 =
的優先順序低於管線運算符 |
,因此不需要括號,即可將命令管線的結果指派給變數。 例如,下列命令會排序電腦上的服務,然後將已排序的服務指派給 $a
變數:
$a = Get-Service | Sort-Object -Property name
您也可以將 語句所建立的值指派給變數,如下列範例所示:
$a = if ($b -lt 0) { 0 } else { $b }
如果 $b
的值小於零,本範例會將零指派給 $a
變數。 如果 $b
的值不小於零,則會將 $b
的值指派給 $a
。
指派運算子
指派運算子 =
將值指派給變數。 如果變數已經有值,指派運算子 =
取代值而不發出警告。
下列語句會將整數值 6 指派給 $a
變數:
$a = 6
若要將字串值指派給變數,請以引號括住字串值,如下所示:
$a = "baseball"
若要將陣列 (多個值) 指派給變數,請使用逗號分隔值,如下所示:
$a = "apple", "orange", "lemon", "grape"
若要將哈希表指派給變數,請在PowerShell中使用標準哈希表表示法。 輸入符號 @
後面接著以分號分隔的索引鍵/值組 ;
,並以大括弧括住 { }
。 例如,若要將哈希表指派給 $a
變數,請輸入:
$a = @{one=1; two=2; three=3}
若要將十六進位值指派給變數,請在值前面加上 0x
。
PowerShell 會將十六進位值 (0x10) 轉換為十進位值(在此案例中為 16),並將該值指派給 $a
變數。 例如,若要將 0x10的值指派給 $a
變數,請輸入:
$a = 0x10
若要將指數值指派給變數,請輸入根編號、字母 e
,以及代表 10 倍數的數位。 例如,若要將值 3.1415 指派給 1,000 的電源給 $a
變數,請輸入:
$a = 3.1415e3
PowerShell 也可以將 kb KB
、mb MB
和 gb GB
轉換成位元組。 例如,若要將 10 KB 的值指派給 $a
變數,請輸入:
$a = 10kb
加法運算子指派
加法運算符指派 +=
遞增變數的值,或將指定的值附加至現有的值。 動作取決於變數是否有數值或字串類型,以及變數是否包含單一值(純量)或多個值(集合)。
+=
運算符會結合兩個作業。 首先,它會新增 ,然後指派它。
因此,下列語句是相等的:
$a += 2
$a = ($a + 2)
當變數包含單一數值時,+=
運算符會依運算子右側的數量遞增現有的值。 然後,運算符會將產生的值指派給變數。 下列範例示範如何使用 +=
運算符來增加變數的值:
$a = 4
$a += 2
$a
6
當變數的值是字串時,運算元右邊的值會附加至字串,如下所示:
$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell
當變數的值是陣列時,+=
運算符會將運算子右邊的值附加至陣列。 除非透過轉型明確輸入陣列,否則您可以將任何類型的值附加至陣列,如下所示:
$a = 1,2,3
$a += 2
$a
1
2
3
2
和
$a += "String"
$a
1
2
3
2
String
當變數的值是哈希表時,+=
運算符會將運算元右邊的值附加至哈希表。 不過,因為您可以新增至哈希表的唯一類型是另一個哈希表,所有其他指派都會失敗。
例如,下列命令會將哈希表指派給 $a
變數。
然後,它會使用 +=
運算符,將另一個哈希表附加至現有的哈希表,有效地將新的索引鍵/值組新增至現有的哈希表。
此指令會成功,如輸出所示:
$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name Value
---- -----
a 1
b 2
mode write
c 3
下列命令會嘗試將整數 「1」 附加至 $a
變數中的哈希表。 這個指令失敗:
$a = @{a = 1; b = 2; c = 3}
$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)
下列範例示範如何使用 -=
運算子來減少變數的值:
$a = 8
$a -= 2
$a
6
您也可以使用 -=
指派運算子來減少數值陣列成員的值。 若要這樣做,請指定您要變更之數位專案的索引。 在下列範例中,陣列第三個元素的值會減少 1:
$a = 1,2,3
$a[2] -= 1
$a
1
2
2
您無法使用 -=
運算子來刪除變數的值。 若要刪除指派給變數的所有值,請使用 Clear-Item 或 Clear-Variable Cmdlet 將值指派給變數 $null
或 ""
。
$a = $null
若要從陣列中刪除特定值,請使用陣列表示法將值指派給特定專案 $null
。 例如,下列語句會從陣列中刪除第二個值(索引位置 1):
$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3
若要刪除變數,請使用 Remove-Variable Cmdlet。 當變數明確轉換成特定數據類型,而且您想要不具類型的變數時,這個方法很有用。 下列命令會刪除 $a
變數:
Remove-Variable -Name a
乘法運算子指派
乘法運算符指派 *=
乘以數值,或附加變數字元串值的指定複本數目。
當變數包含單一數值時,該值會乘以運算符右邊的值。 例如,下列範例示範如何使用 *=
運算符,將變數的值相乘:
$a = 3
$a *= 4
$a
12
在此情況下,*=
運算符會結合兩個作業。 首先,它會乘以,然後指派。 因此,下列語句是相等的:
$a *= 2
$a = ($a * 2)
當變數包含字串值時,PowerShell 會將指定的字串數目附加至值,如下所示:
$a = "file"
$a *= 4
$a
filefilefilefile
若要將陣列的元素相乘,請使用索引來識別您要相乘的專案。 例如,下列命令會將陣列中的第一個專案乘以 2:0:
$a[0] *= 2
依除法運算符指派
除法運算子指派 /=
將數值除以運算子右邊所指定的值。 運算子不能與字串變數搭配使用。
/=
運算符會結合兩個作業。 首先,它會分割,然後指派。 因此,下列兩個語句相等:
$a /= 2
$a = ($a / 2)
例如,下列命令會使用 /=
運算子來分割變數的值:
$a = 8
$a /=2
$a
4
若要分割陣列的元素,請使用索引來識別您想要變更的專案。 例如,下列命令會將陣列中的第二個專案(索引位置 1) 除以 2:
$a[1] /= 2
模數運算子指派
模數運算子指派 %=
將變數的值除以運算元右邊的值。 然後,%=
運算符會將餘數(稱為模數)指派給變數。 只有當變數包含單一數值時,才可以使用此運算符。 當變數包含字串變數或數位時,您無法使用此運算元。
%=
運算符會結合兩個作業。 首先,它會分割並決定餘數,然後將餘數指派給變數。 因此,下列語句是相等的:
$a %= 2
$a = ($a % 2)
下列範例示範如何使用 %=
運算子來儲存商數的模數:
$a = 7
$a %= 4
$a
3
遞增和遞減運算符
遞增運算子 ++
將變數的值增加 1。 當您在簡單語句中使用遞增運算符時,不會傳回任何值。 若要檢視結果,請顯示變數的值,如下所示:
$a = 7
++$a
$a
8
若要強制傳回值,請將變數和運算符括在括弧中,如下所示:
$a = 7
(++$a)
8
遞增運算符可以放在變數之前(前置詞)或之後。 運算子的前置詞版本會在 語句中使用變數值之前遞增變數,如下所示:
$a = 7
$c = ++$a
$a
8
$c
8
運算子的後置版本會在語句中使用變數值之後遞增變數。 在下列範例中,$c
和 $a
變數具有不同的值,因為值會在 $a
變更之前指派給 $c
:
$a = 7
$c = $a++
$a
8
$c
7
遞減運算子 --
將變數的值減少 1。 如同遞增運算符,當您在簡單語句中使用 運算符時,不會傳回任何值。 使用括弧傳回值,如下所示:
$a = 7
--$a
$a
6
(--$a)
5
運算子的前置詞版本會在 語句中使用變數值之前遞減變數,如下所示:
$a = 7
$c = --$a
$a
6
$c
6
運算子的後置版本會在語句中使用變數值之後遞減變數。 在下列範例中,$d
和 $a
變數具有不同的值,因為值會在 $a
變更之前指派給 $d
:
$a = 7
$d = $a--
$a
6
$d
7
Microsoft .NET Framework 類型
根據預設,當變數只有一個值時,指派給變數的值會決定變數的數據類型。 例如,下列命令會建立具有 「Integer」 (System.Int32) 類型的變數:
$a = 6
若要尋找變數的 .NET Framework 類型,請使用 GetType 方法及其 FullName 属性,如下所示。 即使方法呼叫沒有自變數,請務必在 getType 方法名稱
$a = 6
$a.GetType().FullName
System.Int32
若要建立包含字串的變數,請將字串值指派給變數。 若要指出值是字串,請以引弧括住它,如下所示:
$a = "6"
$a.GetType().FullName
System.String
如果指派給變數的第一個值是字串,PowerShell 會將所有作業視為字串作業,並將新的值轉換成字串。 這種情況發生在下列範例中:
$a = "file"
$a += 3
$a
file3
如果第一個值是整數,PowerShell 會將所有作業視為整數作業,並將新的值轉換成整數。 這種情況發生在下列範例中:
$a = 6
$a += "3"
$a
9
您可以將新的純量變數轉換成任何 .NET Framework 類型,方法是將類型名稱放在變數名稱或第一個指派值前面的括弧中。 當您轉換變數時,您可以決定可儲存在變數中的數據類型。 而且,您可以在操作變數時判斷變數的行為方式。
例如,下列命令會將變數轉換成字串類型:
[string]$a = 27
$a += 3
$a
273
下列範例會轉換第一個值,而不是轉換變數:
$a = [string]27
當您將變數轉換成特定類型時,常見的慣例是轉換變數,而不是值。 不過,如果現有變數的值無法轉換成新的數據類型,則無法重新轉換現有變數的數據類型。 若要變更資料類型,您必須取代其值,如下所示:
$a = "string"
[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 <<<<
[int]$a = 3
此外,當您在變數名稱前面加上數據類型時,除非您藉由指定另一個數據類型來明確覆寫類型,否則該變數的類型會鎖定。 如果您嘗試指派與現有類型不相容的值,而且未明確覆寫類型,PowerShell 會顯示錯誤,如下列範例所示:
$a = 3
$a = "string"
[int]$a = 3
$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"
[string]$a = "string"
在 PowerShell 中,包含數位中多個專案的變數數據類型會與包含單一專案的變數數據類型不同。 除非資料類型特別指派給陣列變數,否則資料類型一律 System.Object []
。 此數據類型是陣列特有的。
有時候,您可以藉由指定另一個類型來覆寫預設類型。 例如,下列命令會將變數轉換成 string []
陣列類型:
[string []] $a = "one", "two", "three"
PowerShell 變數可以是任何 .NET Framework 數據類型。 此外,您可以指派目前進程中可用的任何完整 .NET Framework 數據類型。 例如,下列命令會指定 System.DateTime
資料類型:
[System.DateTime]$a = "5/31/2005"
變數將會指派符合 System.DateTime
數據類型的值。
$a
變數的值如下:
Tuesday, May 31, 2005 12:00:00 AM
指派多個變數
在 PowerShell 中,您可以使用單一命令將值指派給多個變數。 指派值的第一個專案會指派給第一個變數、第二個元素指派給第二個變數、第三個元素指派給第三個變數等等。 例如,下列命令會將值 1 指派給 $a
變數、將值 2 指派給 $b
變數,並將值 3 指派給 $c
變數:
$a, $b, $c = 1, 2, 3
如果指派值包含的元素數目超過變數,則所有剩餘的值都會指派給最後一個變數。 例如,下列命令包含三個變數和五個值:
$a, $b, $c = 1, 2, 3, 4, 5
因此,PowerShell 會將值 1 指派給 $a
變數,並將值 2 指派給 $b
變數。 它會將值 3、4 和 5 指派給 $c
變數。
若要將 $c
變數中的值指派給其他三個變數,請使用下列格式:
$d, $e, $f = $c
此命令會將值 3 指派給 $d
變數、值 4 指派給 $e
變數,並將值 5 指派給 $f
變數。
如果指派值包含的專案小於變數,則結尾的所有其餘變數都不會指派任何值。 例如,下列命令包含三個變數和兩個值:
$a, $b, $c = 1, 2
因此,PowerShell 會將值 1 指派給 $a
變數,並將值 2 指派給 $b
變數。 它不會將任何值指派給 $c
變數。
您也可以藉由鏈結變數,將單一值指派給多個變數。 例如,下列命令會將 「three」 的值指派給這四個變數:
$a = $b = $c = $d = "three"
變數相關 Cmdlet
除了使用指派作業來設定變數值之外,您也可以使用 Set-Variable Cmdlet。 例如,下列命令會使用 Set-Variable
,將 1、 2、 3 的陣列指派給 $a
變數。
Set-Variable -Name a -Value 1, 2, 3