共用方式為


關於運算子

簡短描述

描述 PowerShell 支援的運算子。

完整描述

運算子是可在命令或表達式中使用的語言專案。 PowerShell 支援數種類型的運算子,以協助您操作值。

算術運算子

使用算術運算子 (+、、、 -*/) % 來計算命令或表達式中的值。 透過這些運算符,您可以加入、減去、相乘或除值,並計算除法運算 (餘數) 。

加法運算符會串連專案。 乘法運算符會傳回每個元素的指定複本數目。 您可以在任何實作這些運算子的 .NET 類型上使用算術運算符,例如:Int、、StringDateTimeHashtable和 陣列。

位運算子 (-band-bor、、、、、-shl-bnot-bxor) -shr 操作值的位模式。

如需詳細資訊,請參閱 about_Arithmetic_Operators

指派運算子

使用指派運算子 (=+=、、、-=*=、、/=) %= ,將值指派、變更或附加至變數。 您可以將算術運算符與指派結合,將算術運算的結果指派給變數。

如需詳細資訊,請參閱 about_Assignment_Operators

比較運算子

使用 (、、-ne、、、-lt) -le-ge 比較值和測試條件的比較運算符-eq-gt。 例如,您可以比較兩個字串值,以判斷它們是否相等。

比較運算子也包含尋找或取代文字模式的運算符。 -match (、-notmatch-replace) 運算子使用正規表示式, (-like) 使用 -notlike 通配符 *

內含項目比較運算符會判斷測試值是否出現在參考集中, (-in、、-notin-contains-notcontains) 。

類型比較運算子 (-is-isnot) 判斷物件是否為指定的類型。

如需詳細資訊,請參閱 about_Comparison_Operators

邏輯運算子

使用邏輯運算子 (-and、、、 -or-xor-not、) ! 將條件語句連接到單一複雜條件。 例如,您可以使用邏輯 -and 運算符來建立具有兩個不同條件的對象篩選。

如需詳細資訊,請參閱 about_Logical_Operators

重新導向運算子

使用重新導向運算子 (>>>2>2>>2>&1) ,將命令或表達式的輸出傳送至文本檔。 重新導向運算子的運作方式就像 Out-File Cmdlet (,而沒有參數) ,但也可讓您將錯誤輸出重新導向至指定的檔案。 您也可以使用 Tee-Object Cmdlet 重新導向輸出。

如需詳細資訊,請參閱 about_Redirection

分割和聯結運算符

-join 運算子會-split分割和合併子字串。 運算符 -split 會將字串分割成子字串。 運算符 -join 會將多個字串串連成單一字串。

如需詳細資訊,請參閱 about_Splitabout_Join

運算子型別

使用、) -isnot-as (-is類型運算子來尋找或變更物件的 .NET Framework 類型。

如需詳細資訊,請參閱 about_Type_Operators

一元運算子

使用一元運算符來遞增或遞減變數或物件屬性,並將整數設定為正數或負數。 例如,若要將變數 $a9 遞增為 10,請輸入 $a++

特殊運算子

特殊運算符具有不符合任何其他運算符群組的特定使用案例。 例如,特殊運算符可讓您執行命令、變更值的數據類型,或從陣列擷取元素。

群組運算子 ( )

如同其他語言, (...) 用來覆寫運算式中的運算元優先順序。 例如:(1 + 2) / 3

不過,在 PowerShell 中,還有其他行為。

  • (...) 可讓您讓 命令 的輸出參與表達式。 例如:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • 當做管線的第一個區段使用時,將命令或表達式包裝在括弧中,不一定會導致表達式結果的 列舉 。 如果括弧包裝 命令,則會在透過管線傳送結果之前,先執行以在 記憶體中收集 的所有輸出完成。

注意

將命令包裝在括弧中會導致自動變數 $? 設定為 $true,即使封入的命令本身設定 $? 為 也一 $false樣。 例如, (Get-Item /Nosuch); $? 非預期地產生 True。 如需 的詳細資訊 $?,請參閱 about_Automatic_Variables

Subexpression 運算符 $( )

傳回一或多個語句的結果。 針對單一結果,傳回純量。 針對多個結果,傳回陣列。 當您想要在另一個運算式中使用表示式時,請使用此選項。 例如,在字串表示式中內嵌命令的結果。

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

陣列子表達式運算子 @( )

傳回一或多個語句做為陣列的結果。 如果只有一個專案,陣列就只有一個成員。

@(Get-CimInstance win32_logicalDisk)

哈希表常值語法 @{}

與陣列子表示式類似,此語法是用來宣告哈希表。 如需詳細資訊,請參閱 about_Hash_Tables

呼叫運算子 &

執行命令、腳本或腳本區塊。 呼叫運算符也稱為「調用運算元」,可讓您執行儲存在變數中的命令,並以字串或腳本區塊表示。 呼叫運算子會在子範圍中執行。 如需範圍的詳細資訊,請參閱 about_Scopes

此範例會將命令儲存在字串中,並使用呼叫運算符執行它。

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

呼叫運算子不會剖析字串。 這表示當您使用呼叫運算符時,無法在字串中使用命令參數。

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Invoke-Expression Cmdlet 可以執行程式碼,以在使用呼叫運算符時造成剖析錯誤。

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

您可以使用呼叫運算符,使用其檔名來執行腳本。 下列範例顯示包含空格的腳本檔名。 當您嘗試執行文稿時,PowerShell 會改為顯示包含檔名的引號字串內容。 呼叫運算子可讓您執行包含檔名的字串內容。

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

如需腳本區塊的詳細資訊,請參閱 about_Script_Blocks

背景運算元 &

在 PowerShell 作業的背景中執行管線。 此運算子的作用類似於 UNIX 控制運算符連字元和 () & ,它會在子Shell 中以異步方式以作業方式執行命令。

此運算子的功能相當於 Start-Job。 下列範例示範背景作業運算數的基本用法。

Get-Process -Name pwsh &

該命令的功能相當於 下列用法 Start-Job

Start-Job -ScriptBlock {Get-Process -Name pwsh}

就像 一樣 Start-Job,背景運算符會 &Job 回 物件。 這個物件可以搭配 Receive-JobRemove-Job使用,就像您用來 Start-Job 啟動作業一樣。

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

&背景運算符也是語句終止符,就像 UNIX 控制運算符連字元和 (&) 一樣。 這可讓您在背景運算符之後 & 叫用其他命令。 下列範例示範背景運算符之後 & 的其他命令調用。

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

這相當於下列腳本:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

如果您想要執行多個命令,每個命令都會在自己的背景進程中執行,但全都在一行上,只要在每個命令之間和之後放置 &

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

如需 PowerShell 作業的詳細資訊,請參閱 about_Jobs

轉換運算元 [ ]

將物件轉換成或限制為指定的型別。 如果無法轉換物件,PowerShell 會產生錯誤。

[DateTime]"2/20/88" - [DateTime]"1/20/88"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

當變數指派給使用 轉換表示法時,也可以執行轉換。

逗號運算子 ,

做為二進位運算符,逗號會建立陣列或附加至所建立的陣列。 在表達式模式中,逗號只會建立一個成員的陣列,做為一元運算元。 將逗號放在成員之前。

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

因為 Write-Object 需要自變數,所以您必須將表達式放在括弧中。

點來源運算子 .

在目前範圍內執行腳本,讓腳本建立的任何函式、別名和變數都會新增至目前的範圍,並覆寫現有的函式。 腳本所宣告的參數會變成變數。 未指定任何值的參數會變成沒有值的變數。 不過,會保留自動變數 $args

. c:\scripts\sample.ps1 1 2 -Also:3

注意

點來源運算子後面接著空格。 使用空格來區分點與代表目前目錄的點 (.) 符號。

在下列範例中,目前目錄中的 Sample.ps1 腳本是在目前範圍內執行。

. .\sample.ps1

格式運算元 -f

使用字串物件的 format 方法來格式化字串。 輸入運算子左邊的格式字串,以及要格式化在運算元右邊的物件。

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

如果您需要在格式化字串中保留大括弧 ({}) ,可以藉由將大括號加倍來逸出它們。

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

如需詳細資訊,請參閱 String.Format 方法和 複合格式

索引運算子 [ ]

從索引集合中選取物件,例如數位和哈希表。 陣列索引是以零起始,因此第一個物件會編製索引為 [0]。 對於只有) 陣列 (,您也可以使用負數索引來取得最後一個值。 哈希表會依索引鍵值編製索引。

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

管線運算子 |

傳送 (“pipes”,) 前面命令的輸出傳送至其後面的命令。 當輸出包含多個物件 (“collection”) 時,管線運算符會一次傳送一個物件。

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

範圍運算子 ..

表示整數陣列中的循序整數,指定上限和下限。

1..10
foreach ($a in 1..$max) {Write-Host $a}

您也可以以反向順序建立範圍。

10..1
5..-5 | ForEach-Object {Write-Output $_}

從 PowerShell 6 開始,範圍運算符會搭配 CharactersIntegers 運作。

若要建立字元範圍,請以引號括住界限字元。

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

成員存取運算子 .

存取 物件的屬性和方法。 成員名稱可能是表達式。

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

靜態成員運算符 ::

呼叫 .NET Framework 類別的靜態屬性和方法。 若要尋找對象的靜態屬性和方法,請使用 Cmdlet 的 Get-Member Static 參數。 成員名稱可能是表達式。

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

另請參閱

about_Arithmetic_Operators

about_Assignment_Operators

about_Comparison_Operators

about_Logical_Operators

about_Operator_Precedence

about_Type_Operators

about_Split

about_Join

about_Redirection