Powershell 中除了常見的算術運算符,賦值運算符,比較運算符,位運算符,邏輯運算符,字符串的拆分和合並運算符,轉義字符,還有一些特殊的運算符,這些特殊的運算符每每能夠解決一些特殊的問題,好比執行運行命令,更改值的數據類型等。
shell
& (調用運算符)數組
使用 & (調用運算符)能夠運行命令、腳本或腳本塊。由於調用運算符不進行分析,因此它不能解釋命令參數。此調用運算符用於指示它後面的值爲命令(而不是字符串)。使用此運算符能夠運行存儲在變量中並由字符串表示的命令。例如:安全
PS C:\> $command = "Get-Service" PS C:\> $command Get-Service PS C:\> & $command Status Name DisplayName ------ ---- ----------- Stopped AdobeFlashPlaye... Adobe Flash Player Update Service Stopped Alerter Alerter Stopped ALG Application Layer Gateway Service Stopped AppMgmt Application Management Stopped aspnet_state ASP.NET 狀態服務 Running Ati HotKey Poller Ati HotKey Poller Running AudioSrv Windows Audio ...
從上面的例子中能夠看出,將 Get-Service 命令賦值給變量 $command , 因此當輸入 $command 輸出的是字符串值 "Get-Service",若是要執行該命令,則須要在變量前添加調用運算符。
ide
這個命令在實際的應用中很是有用,好比能夠將cmd 命令賦值給變量,而後利用調用運算符就能夠執行 cmd 命令。
模塊化
2. . (屬性引用運算符,或稱爲點運算符)spa
利用屬性運算符就能夠像高級語言語言同樣,經過點運算符訪問對象的屬性和方法。例如:
對象
PS C:\> $myStr = "This is my string" PS C:\> $myStr.Length 17 PS C:\> $myStr.Substring(1,4) his
點運算符,再加上 Powershell 的自動補全功能,能夠極大地提升輸入命令的準確度,例如你能夠輸出 $myStr.Len<Tab鍵> , 命令就會自動補全。 前面咱們介紹了字符串的拆分和合並運算符,其實有很大一部分操做,能夠經過字符串的方法來實現,好比字符串的SubString()能夠截取指定的子字符串。
ci
除了引用屬性,點運算符還有一種更重要的應用。
作用域
使用點"." 得到來源運算符字符串
意思是經過運行腳本,使腳本中的項目成爲調用做用域的組成部分,通俗點將就是,能夠在當前腳本中調用其餘的腳本,則其餘腳本中的方法及變量在當前做用域都有效。這在腳本的模塊化的使用中很是有用,便可以將常常使用的方法放在一個腳本中,每次使用時加載這個腳本,就可使用該腳本中的方法。例如:
. c:\.sample.ps1
若是在腳本中加入該語句,則能夠在當前做用域使用sample.ps1 中的全部方法及變量。
除此以外,點運算符還有最多見的使用。
點 (.) 還用做父目錄符號
這一點應該是你們都屬性的。在 Powershell 中,雙擊腳本,默認是不會執行的(不像bat等腳本,雙擊直接運行),這主要是出於對安全的考慮。在 Powershell 執行腳本的格式以下:
PS C:\> .\sample.ps1
3. :: (靜態成員運算符)
靜態成員運算符常常用來調用 .NET Framework 類的靜態屬性運算符和方法。要查找對象的靜態屬性和方法,能夠把命令的輸出經過管道(|)輸入給 Get-Member cmdlet 命令。例如:
PS C:\> [datetime]::now 2017年1月15日星期日 19:11:40 PS C:\> [datetime]::now | Get-Member TypeName: System.DateTime Name MemberType Definition ---- ---------- ---------- Add Method System.DateTime Add(System.TimeSpan value) AddDays Method System.DateTime AddDays(double value) AddHours Method System.DateTime AddHours(double value) AddMilliseconds Method System.DateTime AddMilliseconds(double value) AddMinutes Method System.DateTime AddMinutes(double value)
4. ..(範圍運算符)
範圍運算符表示給定上下限的整數數組中的序列整數,注意該運算符只針對整數有效。利用該運算能夠快速建立指定範圍的整數數組。例如:
PS C:\> 1..4 1 2 3 4 PS C:\> 4..1 4 3 2 1 PS C:\> $max = 5 PS C:\> foreach ( $a in 1..$max )` >> { >> Write-Host $a >> } >> 1 2 3 4 5
從上面的例子中能夠看出,使用範圍運算符可使語法更簡潔和直觀。
5. -f (格式運算符)
使用字符串對象的格式化方法對字符串進行格式化。在運算符左側輸入格式字符串,在運算符右側輸入要格式化的對象。例如:
PS D:\> "{0} {1} {2:N}" -f 1,"Hello",[math]::pi 1 Hello 3.14
以上語句中-f 以前的{0} {1} {2} 都是佔位符,-f 以後是要替換佔位的值,對於第三個值,格式化使其只輸出兩位小數。
格式運算符經常使用在對時間,日期,以及對輸出結果(保留幾位小數等)的格式化。
6. $( ) 子表達式運算符
返回一條或多條語句的結果。對於單個結果將返回標量。對於多個結果將返回數組。例如:
PS C:\> $x = 2 PS C:\> $( $x * 5) 10 PS C:\> $( Get-Process powershell) Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 432 6 29248 20352 139 3.27 3320 powershell
7. @( ) 數組子表達式運算符
經過數組返回一條或多條語句的結果。若是隻有一項,則數組只有一個成員。例如:
PS C:\> @( Get-WmiObject win32_logicalDisk) DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 27906625536 Size : 44811317248 VolumeName : DeviceID : D: DriveType : 3 ProviderName : FreeSpace : 7755649024 Size : 42950717440 VolumeName : 軟件
8. ,(逗號運算符)
用做二元運算符時,逗號用於建立數組。用做一元運算符時,逗號用於建立只含一個成員的數組。逗號放在成員以前。例如對比一下命令的執行結果:
PS C:\> $myArray = 1,2,3 PS C:\> $singleArray = ,1 PS C:\> $singleInt = 1
第一條命令和第二條命令建立都是整數數組,第二條命令建立的數組只有一個元素。第三條命令建立的是一個數型變量。
總結
Powershell 中的特殊運算符能夠實現一些其餘運算沒法實現的一些功能。尤爲是調用運算符和點運算,以及靜態成員運算符,能夠實現其餘運算可望不可即的功能,掌握好這些特殊運算符,能夠實現 Powershell 中許多奇技淫巧。