這節介紹 Powershell 中的類型運算符。
Powershell 中的類型運算符可以與 .Net Framework 類型協同使用,可以用來判斷一個對象是否是指定的 .Net Framework 類型的一個實例,或是判斷一個對象是否可以轉換爲 .Net Framework 類型。
Powershell 支持以下類型運算符
運算符 | 說明 | 示例 |
-is | 如果對象是指定的 .Net Framework 類型則返回 TRUE,否則返回 FALSE | PS C:\> "abc" -is [string] True |
-isnot | -is 運算符的對立面,如果對象不是指定的 .Net Framework 類型則返回 TRUE,否則返回 FALSE | PS C:\> "abc" -isnot [string] False |
-as | 將對象轉換爲指定的 .Net Framework 類型。如果轉化成功,則返回轉換後的對象。如果轉換失敗,什麼也不返回(也不返回錯誤) | PS C:\> "1234" -as [int] 1234 PS C:\> "abc" -as [int] PS C:\> |
類型運算符的語法如下:
<input> <operator> [.NET type]
.Net type 也可以放在雙引號中,即也可以使用如下語法:
<input> <operator> ".NET type"
對於 System.DateTime 類型,可以輸入 [DateTime] 或"datetime"。如果某個類型不在系統的根命名空間中,則需要指定該對象類型的全名。"System."命令空間可以省略。例如,若要指定 System.Diagnostics.Process,
可以輸入 [System.Diagnostics.Process]、[Diagnostics.Process] 或者"diagnostics.process"。
類型運算符始終返回一個布爾值,即使輸入對象是集合時也是如此。但是,如果輸入是一個集合,那麼類型運算符會匹配這一集合的 .NET Framework 類型。類型運算符不會匹配每個對象的類型,即使所有對象的類型完全一樣時也是如此。
要查找對象的 .NET Framework 類型,請使用將對象通過管道運算符(|)連接 Get-Member cmdlet。另外,也可以結合使用所有對象的GetType() 方法以及該方法的 FullName 屬性,這個方法在Powershell中變量的類型介紹過。
下面會舉例說明這些運算符的用法
-is 運算符的用法示例
PS C:\> 3 -is [Float] False PS C:\> 3 -is [int] True PS C:\> ( Get-Date ) -is [DateTime] True PS C:\> "20170111" -is [DateTime] False PS C:\> "01/11/2017" -is [DateTime] False PS C:\> "01/11/2017" -is [string] True PS C:\> (Get-Process powershell) -is [System.Diagnostics.Process] True PS C:\> (Get-Command Get-Member) -is [System.Management.Automation.CmdletInfo] True
下面的例子說明,如果輸入的對象是集合時,判斷的是集合的 .Net Framework 的類型,而不是集合中單個對象的類型。
PS C:\> (Get-Culture) -is [System.Globalization.CultureInfo] True PS C:\> (Get-Uiculture) -is [System.Globalization.CultureInfo] True PS C:\> (Get-Culture) , (Get-Uiculture) -is [System.Globalization.CultureInfo] False PS C:\> (Get-Culture) , (Get-Uiculture) -is [Array] True PS C:\> (Get-Culture) , (Get-Uiculture) | Foreach { $_ -is [System.Globalization.CultureInfo]} True True PS C:\> (Get-Culture) , (Get-Uiculture) -is [Object] True
上面的例子中,雖然 Get-Culture 和 Get-UICulture cmdlet 都返回 System.Globalization
.CultureInfo 對象,但是這些對象的集合卻是一個 System.Object 數組。
2. -as 運算符的用法示例
PS C:\> "01/11/2017" -is [datetime] False PS C:\> "01/11/2017" -as [datetime] 2017年1月11日星期三 00:00:00 PS C:\> $date = "01/11/2017" -as [datetime] PS C:\> $date -is [datetime] True PS C:\> 1031 -as [System.Globalization.CultureInfo] LCID Name DisplayName ---- ---- ----------- 1031 de-DE 德語(德國)
另外上面也提到,當輸入的對象用 -as 運算符無法轉換爲指定的 .Net Framework 類型時,什麼也不輸出。例如:
PS C:\> "shell" -as [int] PS C:\>
總結
-is 、-isnot 判斷對象是否是指定的 .Net Framework 的實例,也可以用來判斷指定的文件是否是文件或是文件夾。 -as 運算符是用來做類型轉換的,例如在數據庫查詢到一個字符串時間,將其轉換爲 [DateTime] 類型。