1.Arithmetic operators(算術運算符)
算術運算符包括加、減、乘、除、取模
此外,加法運算符 (+) 和乘法運算符 (*) 還可對字符串、數組和哈希表進行運算。加法運算符將輸入連接起來。乘法運算符返回輸入的多個副本。
運算符
說明
--------
+
—
—
*
/
%
運算符優先級
圓括號() > -(對負號) > *,/,% > +,-(對減號)
對非數字類型進行加法和乘法運算
可以對數字、字符串、數組和哈希表進行加法運算。在進行加法運算時會將元素連接起來。在連接集合(如數組或哈希表)時,會創建包含兩個集合中的對象的新對象
也可以對數字、字符串和數組進行乘法運算。但是,不能對哈希表進行乘法運算。因爲試圖連接具有相同鍵的哈希表,運算會失敗。
e.g:
c:\PS> "file" + 16
c:\PS> $array = 1,2,3
c:\PS> $array + 16
輸出
1
2
3
16
c:\PS> $array + "file"
1
2
3
file
c:\PS> "file" * 3
此外,還可以對不同類型的對象執行算術運算。Windows PowerShell 執行的運算由運算中最左邊的對象的 Microsoft .NET Framework 類型確定。Windows PowerShell 會嘗試將運算中的所有對象都轉換爲第一個對象的 .NET Framework 類型。如果轉換對象成功,則執行適用於第一個對象的 .NET Framework 類型的運算。如果在轉換任何對象時失敗,則運算失敗。
因爲用於計算語句的方法由最左邊的對象確定,所以 Windows PowerShell 中的加法和乘法不是嚴格可交換的。例如,(a + b) 並不總是等於 (b + a),而 (a * b) 也不總是等於 (b * a)
e.g: "file" + 2≠2 + "file"
關於加法運算後結果的類型
1.Windows PowerShell 自動選擇最適於表示結果而不丟失精度的 .NET Framework 數值類型
2.如果運算結果超出類型的表示範圍,則擴大結果的類型以容納結果
3.結果的類型不一定與其中某個操作數相同。在下面的示例中,負值不能轉換爲無符號整數,而無符號整數太大,不能轉換爲 Int32:C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname輸出System.Int64
4.System.Decimal 類型是一個例外。如果任意一個操作數是 Decimal 類型,則結果將是 Decimal 類型。如果結果超出 Decimal 類型的表示範圍,將不會轉換爲 Double。而會生成錯誤
C:\PS> [Decimal]::maxvalue + 1
Error:
At line:1 char:22
+ [Decimal]::maxvalue + <<<< 1
2.Assignment operators(賦值運算符)
賦值運算符可向一個變量賦予一個或多個值。賦值運算符可以在賦值之前對值執行數值運算。
運算符
----------------------
=
+=
-=
*=
/=
%=
++
--
遞增運算符
遞增運算符可以放在變量之前(前綴)或之後(後綴)。
前綴形式:在變量的值用於語句之前使變量遞增
c:\PS> $a = 7
c:\PS> $c = ++$a
c:\PS>$a
c:\PS>$c
後綴形式:後綴形式在變量的值用於語句之後使變量遞增
C:\PS> $a = 7
C:\PS> $c = $a++
C:\PS> $a
C:\PS> $c
遞減運算符的前綴形式和後綴形式類似
爲多個變量賦值
在 Windows PowerShell 中,可以使用單個命令對多個變量賦值。所賦值的第一個元素將賦予第一個變量,第二個元素賦予第二個變量,第三個元素賦予第三個變量,依此類推。
如果所賦值包含的元素個數超過變量數,則將所有剩餘的值都賦予最後一個變量。
通過串聯變量,還可以將單個值賦予多個變量。e.g:$a = $b = $c = $d = "three"
除了使用賦值運算來設置變量值以外,還可以使用 Set-Variable cmdlet。例如,下面的命令使用Set-Variable 將包含 1、2、3 的數組賦予 $a 變量。
3.Comparison operators(比較運算符)
默認情況下,所有比較運算符都不區分大小寫。若要使一個比較運算符區分大小寫,請在運算符名稱前加字母"c"。例如,"-eq"區分大小寫的形式爲"-ceq"。若要明確表示不區分大小寫,則在運算符前加字母"i"。例如,"-eq"的明確不區分大小寫的形式爲"-ieq"。
符號
------
-eq
-ne
-gt
-ge
-lt
-le
-like
-notlike
-match
-notmatch使用正則表達式來查找與指定模式匹配或不匹配的元素。
-contains
-notcontains
-replace
關於match/notmatch二三事
匹配運算符(-match 和 -notmatch)使用正則表達式來查找與指定模式匹配或不匹配的元素。
語法是:
匹配運算符僅在字符串中搜索。它們無法在整數數組或其他對象中搜索。
當運算符的輸入(左側參數)是一個單標量對象(像單字符串)時,-match 和 notmatch 運算符返回布爾值,並將 $Matches 自動變量的值設置爲參數的匹配項目。
如果輸入是一個集合,則 -match 和 -notmatch 運算符返回該集合中的匹配成員,但運算符不會填充 $Matches 變量。
e.g:
C:\PS> "Sunday", "Monday", "Tuesday" -match "sun"
C:\PS> "Sunday" -match "sun"輸出True c:\PS> $matches輸出
Name
-----
0
上一條命令向匹配運算符提交一個單字符串。-match 運算符返回布爾值並填充 $Matches 自動變量。
而-notmatch 運算符在輸入是標量且結果爲 False 時(也就是說,當它檢測到匹配項時)填充 $Matches 自動變量。
比較運算符還包括用於操作值中的位模式的位運算符(-bAND、-bOR、-bXOR、-bNOT)
4.Logical and bitwise operators(位邏輯運算符)
Windows PowerShell 邏輯運算符可連接表達式和語句,從而可以用單個表達式來測試多個條件
運算
--------
-and
-or
-xor
-not
!
注:整數 0 的布爾值爲 FALSE。所有其他整數的布爾值都爲 TRUE。
邏輯運算符的語法如下:
<statement> {-AND | -OR | -XOR} <statement>
{! | -NOT} <statement>
使用邏輯運算符的語句返回布爾值(TRUE 或 FALSE)
5.Redirection(重定向運算符)
默認情況下,Windows PowerShell 將其命令輸出發送至 Windows PowerShell 控制檯。但是,也可以將輸出重定向至一個文本文件,或將錯誤輸出重定向至常規輸出流。
可以使用以下幾種方式重定向
a.使用 Out-File cmdlet,該 cmdlet 將命令輸出發送至一個文本文件。通常在需要使用 Out-File cmdlet 的參數(例如 Encoding、Force、Width 或 NoClobber 參數)時使用該 cmdlet。
b.使用 Tee-Object cmdlet,該 cmdlet 將命令輸出發送至一個文本文件,然後將其發送至管道。
c.使用 Windows PowerShell 重定向運算符。
Windows PowerShell重定向運算符如下:
運算符
------
>
>>
2>
2>>
2>&1
重定向運算符的語法如下:<input> <operator> [<path>\]<file>
如果指定的文件已存在,則不追加數據的重定向運算符(> 和 2>)將在不發出警告的情況下覆蓋文件當前內容。但是,如果該文件是隻讀、隱藏或系統文件,則重定向將會失敗。追加重定向運算符(>>
要將內容強制重定向到只讀、隱藏或系統文件,請帶 Force 參數使用 Out-File cmdlet。當寫入文件時,重定向運算符使用 Unicode 編碼。如果文件採用的是不同的編碼,可能無法正確設置輸出的格式。要將內容重定向到非 Unicode 文件,請帶 Encoding 參數使用 Out-File cmdlet。
6.拆分運算符與聯接運算符
-split 和 -join 運算符用於拆分和合並子字符串。-split 運算符將一個字符串拆分爲多個子字符串。-join 運算符將多個字符串連接成單個字符串。
7.類型運算符
說明運算符如何與 Microsoft .NET Framework 類型協同使用。使用類型運算符(-is、-isnot、-as)可查找或更改對象的 .NET Framework 類型。
布爾類型運算符(-is 和 -isnot)用來判斷一個對象是否是指定的 .NET Framework 類型的一個實例。如果類型匹配,-is 返回值爲 True;否則返回值爲 False。如果類型匹配,-isnot 返回值爲 False;否則返回值爲 True。
-as 運算符會嘗試將輸入對象轉換爲指定的 .NET Framework 類型。如果成功,那麼返回轉換後的對象。如果失敗,則什麼也不返回。也不返回錯誤。
類型運算符的語法如下:<input> <operator> [.NET type]
要指定 .NET Framework 類型,可用中括號 ([ ]) 將類型名字括起來,或者以字符串方式輸入類型
e.g:C:\PS> (get-process powershell)[0] -is [System.Diagnostics.Process]輸出True
C:\PS> (get-culture) -is [System.Globalization.CultureInfo]
True
C:\PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True
C:\PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False
C:\PS> (get-culture), (get-uiculture) -is [Array]
True
C:\PS> (get-culture), (get-uiculture) | foreach {$_ -is [System.Globalization.CultureInfo])
True
True
C:\PS> (get-culture), (get-uiculture) -is [Object]
True
8.特殊運算符
使用特殊運算符可以執行其他類型的運算符無法執行的任務。例如,特殊運算符可以執行諸如運行命令和更改值的數據類型這樣的操作。
& 調用運算符
說明:運行命令、腳本或腳本塊。因爲調用運算符不進行分析,所以它不能解釋命令參數。此調用運算符用於指示它後面的值爲命令。使用此運算符可以運行存儲在變量中並由字符串表示的命令。示例:
$c = "get-executionpolicy"
& $c
. 屬性取消引用運算符
說明:訪問對象的屬性和方法。示例:
$myString.substring(1,3)
. 使用點"."獲得來源運算符
說明:運行腳本,使腳本中的項目成爲調用作用域的組成部分。有關詳細信息,請參閱 about_Scope。示例:
. c:\scripts.sample.ps1
注意:點 (.) 還用作父目錄符號,如下例所示:
.\sample.ps1
此命令運行 Sample.ps1 腳本,但不屬於調用作用域的組成部分。
:: 靜態成員運算符
說明:調用 .NET Framework 類的靜態屬性運算符和方法。要查找對象的靜態屬性和方法,請使用 Get-Member cmdlet 的 Static 參數。示例:
[datetime]::now
.. 範圍運算符
說明:表示給定上下限的整數數組中的序列整數。示例:
1..10
10..1
foreach ($a in 1..$max) {write-host $a}
-f 格式運算符
說明:使用字符串對象的格式化方法對字符串進行格式化。在運算符左側輸入格式字符串,在運算符右側輸入要格式化的對象。示例:
C:\PS> "{0} {1,-10} {2:N}" -f
C:\PS> 1,"hello",[math]::pi
1 hello 3.14
$( ) 子表達式運算符
說明:返回一條或多條語句的結果。對於單個結果將返回標量。對於多個結果將返回數組。示例:
$($x * 23)
$(Get-WMIObject win32_Directory)
@( ) 數組子表達式運算符
說明:通過數組返回一條或多條語句的結果。如果只有一項,則數組只有一個成員。示例:
@(Get-WMIObject win32_logicalDisk)
, 運算符
說明:用作二元運算符時,逗號用於創建數組。用作一元運算符時,逗號用於創建只含一個成員的數組。逗號放在成員之前。示例:
$myArray = 1,2,3
$SingleArray = ,1