(20)Powershell中的特殊運算符

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



  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",如果要執行該命令,則需要在變量前添加調用運算符。

    這個命令在實際的應用中非常有用,比如可以將cmd 命令賦值給變量,然後利用調用運算符就可以執行 cmd 命令


2. . (屬性引用運算符,或稱爲點運算符)

    利用屬性運算符就可以像高級語言語言一樣,通過點運算符訪問對象的屬性和方法。例如:

PS C:\> $myStr = "This is my string"
PS C:\> $myStr.Length
17
PS C:\> $myStr.Substring(1,4)
his

    點運算符,再加上 Powershell 的自動補全功能,可以極大地提高輸入命令的準確度,例如你可以輸出 $myStr.Len<Tab鍵> , 命令就會自動補全。 前面我們介紹了字符串的拆分和合並運算符,其實有很大一部分操作,可以通過字符串的方法來實現,比如字符串的SubString()可以截取指定的子字符串。


    除了引用屬性,點運算符還有一種更重要的應用。

使用點"." 獲得來源運算符

    意思是通過運行腳本,使腳本中的項目成爲調用作用域的組成部分,通俗點將就是,可以在當前腳本中調用其他的腳本,則其他腳本中的方法及變量在當前作用域都有效。這在腳本的模塊化的使用中非常有用,即可以將經常使用的方法放在一個腳本中,每次使用時加載這個腳本,就可以使用該腳本中的方法。例如:

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

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