PowerShell 運算符詳解

1.Arithmetic operators(算術運算符)

算術運算符包括加、減、乘、除、取模

此外,加法運算符 (+) 和乘法運算符 (*) 還可對字符串、數組和哈希表進行運算。加法運算符將輸入連接起來。乘法運算符返回輸入的多個副本。

運算符

說明

示例

-------- ------------------- -------------------------

+整數相加;連接字符串、數組和哈希表 6+2"file" + "name"

值減值6-2 (get-date).date - 1

對數字取負4 -6+2

*整數相乘;按指定次數複製字符串和數組 6*2 "w"*3

/兩值相除 6/2

%返回除法運算的餘數 7%2

運算符優先級

圓括號() > -(對負號) > *,/,% > +,-(對減號)

對非數字類型進行加法和乘法運算

可以對數字、字符串、數組和哈希表進行加法運算。在進行加法運算時會將元素連接起來。在連接集合(如數組或哈希表)時,會創建包含兩個集合中的對象的新對象

也可以對數字、字符串和數組進行乘法運算。但是,不能對哈希表進行乘法運算。因爲試圖連接具有相同鍵的哈希表,運算會失敗。

e.g:

c:\PS> "file" + 16輸出file16

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輸出 filefilefile

此外,還可以對不同類型的對象執行算術運算。Windows PowerShell 執行的運算由運算中最左邊的對象的 Microsoft .NET Framework 類型確定。Windows PowerShell 會嘗試將運算中的所有對象都轉換爲第一個對象的 .NET Framework 類型。如果轉換對象成功,則執行適用於第一個對象的 .NET Framework 類型的運算。如果在轉換任何對象時失敗,則運算失敗。

因爲用於計算語句的方法由最左邊的對象確定,所以 Windows PowerShell 中的加法和乘法不是嚴格可交換的。例如,(a + b) 並不總是等於 (b + a),而 (a * b) 也不總是等於 (b * a)

e.g: "file" + 22 + "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:Valuewas either too large or too small for a Decimal.

At line:1 char:22

+ [Decimal]::maxvalue + <<<< 1

2.Assignment operators(賦值運算符)

賦值運算符可向一個變量賦予一個或多個值。賦值運算符可以在賦值之前對值執行數值運算。

運算符說明

----------------------

=將變量的值設置爲指定值

+=使變量的值增加指定值,或將指定值追加到現有值

-=使變量的值減少指定值

*=將變量的值與指定值相乘,或將指定值追加到現有值

/=將變量的值除以指定值

%=將變量的值除以指定值,然後將餘數(模)賦予變量

++使變量、可賦值屬性或數組元素的值增加 1

--使變量、可賦值屬性或數組元素的值減少 1

遞增運算符

遞增運算符可以放在變量之前(前綴)或之後(後綴)。

前綴形式:在變量的值用於語句之前使變量遞增

e.g:

c:\PS> $a = 7

c:\PS> $c = ++$a

c:\PS>$a輸出8

c:\PS>$c輸出8

後綴形式:後綴形式在變量的值用於語句之後使變量遞增

C:\PS> $a = 7

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

C:\PS> $a輸出8

C:\PS> $c輸出7

遞減運算符的前綴形式和後綴形式類似

爲多個變量賦值

在 Windows PowerShell 中,可以使用單個命令對多個變量賦值。所賦值的第一個元素將賦予第一個變量,第二個元素賦予第二個變量,第三個元素賦予第三個變量,依此類推。

如果所賦值包含的元素個數超過變量數,則將所有剩餘的值都賦予最後一個變量。

通過串聯變量,還可以將單個值賦予多個變量。e.g:$a = $b = $c = $d = "three"

除了使用賦值運算來設置變量值以外,還可以使用 Set-Variable cmdlet。例如,下面的命令使用Set-Variable 將包含 1、2、3 的數組賦予 $a 變量。

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

3.Comparison operators(比較運算符)

默認情況下,所有比較運算符都不區分大小寫。若要使一個比較運算符區分大小寫,請在運算符名稱前加字母"c"。例如,"-eq"區分大小寫的形式爲"-ceq"。若要明確表示不區分大小寫,則在運算符前加字母"i"。例如,"-eq"的明確不區分大小寫的形式爲"-ieq"。

符號說明

------ ---------------

-eq等於.在一個或多個輸入值與指定模式相同時,返回一個 TRUE 值或返回匹配項

-ne不等於

-gt大於

-ge大於或等於

-lt小於

-le小於或等於

-like使用通配符(*)匹配e.g: "windows powershell" -like "*shell"輸出true

-notlike使用通配符(*)不匹配e.g:"windows powershell" -like "*shell"輸出false

-match使用正則表達式來查找與指定模式匹配或不匹配的元素。<string[]> -match <regular-expression>

-notmatch使用正則表達式來查找與指定模式匹配或不匹配的元素。

-contains包含運算符。包含一個相同的完整值(而不是值的一部分)。不過,包含運算符始終返回布爾值,即使在輸入爲集合時也如此。

-notcontains包含運算符。不包含一個相同值。e.g:C:PS> "Windows", "PowerShell" -notcontains "Shell"返回True

-replace替換運算符。更改值的指定元素。e.g:C:\PS> "Get-Process" -replace "Get", "Stop"輸出stop-Process

關於match/notmatch二三事

匹配運算符(-match 和 -notmatch)使用正則表達式來查找與指定模式匹配或不匹配的元素。

語法是:

<string[]> -match <regular-expression>

<string[]> -notmatch <regular-expression>

匹配運算符僅在字符串中搜索。它們無法在整數數組或其他對象中搜索。

當運算符的輸入(左側參數)是一個單標量對象(像單字符串)時,-match 和 notmatch 運算符返回布爾值,並將 $Matches 自動變量的值設置爲參數的匹配項目。

如果輸入是一個集合,則 -match 和 -notmatch 運算符返回該集合中的匹配成員,但運算符不會填充 $Matches 變量。

e.g:

C:\PS> "Sunday", "Monday", "Tuesday" -match "sun"輸出Sunday c:\PS> $matches將不會輸出任何東西

C:\PS> "Sunday" -match "sun"輸出True c:\PS> $matches輸出

Name  Value

----- -----

 Sum

上一條命令向匹配運算符提交一個單字符串。-match 運算符返回布爾值並填充 $Matches 自動變量。

而-notmatch 運算符在輸入是標量且結果爲 False 時(也就是說,當它檢測到匹配項時)填充 $Matches 自動變量。

比較運算符還包括用於操作值中的位模式的位運算符(-bAND、-bOR、-bXOR、-bNOT)

4.Logical and bitwise operators(位邏輯運算符)

Windows PowerShell 邏輯運算符可連接表達式和語句,從而可以用單個表達式來測試多個條件

運算說明示例

-------- -------------------------------------------- ------------

-and邏輯與。僅當兩條語句都爲True時才爲true (1 -eq 1) -and (1 -eq 2) False

-or邏輯或。當其中有一條語句爲True時即爲true (1 -eq 1) -and (1 -eq 2) True

-xor邏輯異或。僅當一條語句爲True而另一條語句爲False時才爲True(1 -eq 1) -xor (2 -eq 2) False

-not邏輯非。對後面的語句取反。-not (1 -eq 1) False

邏輯非。對後面的語句取反。(與-not相同)!(1 -eq 1) False

:整數 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重定向運算符如下:

運算符說明示例

------ ------------------------- -----------------

>將輸出發送到指定文件get-process > process.txt

>>將輸出追加到指定文件的內容dir *.ps1 >> scripts.txt

2>將錯誤發送到指定文件get-process none 2> errors.txt

2>>將錯誤追加到指定文件的內容get-process none 2>> save-errors.txt

2>&1將錯誤發送到成功輸出流get-process none, powershell 2>&1

重定向運算符的語法如下:<input> <operator> [<path>\]<file>

如果指定的文件已存在,則不追加數據的重定向運算符(> 和 2>)將在不發出警告的情況下覆蓋文件當前內容。但是,如果該文件是隻讀、隱藏或系統文件,則重定向將會失敗。追加重定向運算符(>> 和 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]也可以是<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.特殊運算符

使用特殊運算符可以執行其他類型的運算符無法執行的任務。例如,特殊運算符可以執行諸如運行命令和更改值的數據類型這樣的操作。

& 調用運算符

說明:運行命令、腳本或腳本塊。因爲調用運算符不進行分析,所以它不能解釋命令參數。此調用運算符用於指示它後面的值爲命令。使用此運算符可以運行存儲在變量中並由字符串表示的命令。示例:

& "new cmdlet"

$c = "get-executionpolicy"

& $c

. 屬性取消引用運算符

說明:訪問對象的屬性和方法。示例:

$myString.length

$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

 

轉載至:http://blog.sina.com.cn/s/blog_7926c5a90100rzey.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章