(20)Powershell中的特殊運算符

    Powershell 中除了常見的算術運算符,賦值運算符,比較運算符,位運算符,邏輯運算符,字符串的拆分和合並運算符,轉義字符,還有一些特殊的運算符,這些特殊的運算符每每能夠解決一些特殊的問題,好比執行運行命令,更改值的數據類型等。
shell



  1. & (調用運算符)數組

    使用 & (調用運算符)能夠運行命令、腳本或腳本塊。由於調用運算符不進行分析,因此它不能解釋命令參數。此調用運算符用於指示它後面的值爲命令(而不是字符串)。使用此運算符能夠運行存儲在變量中並由字符串表示的命令。例如:安全

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 中許多奇技淫巧。

相關文章
相關標籤/搜索