這節介紹 Powershell 中的類型運算符。
shell
Powershell 中的類型運算符能夠與 .Net Framework 類型協同使用,能夠用來判斷一個對象是不是指定的 .Net Framework 類型的一個實例,或是判斷一個對象是否能夠轉換爲 .Net Framework 類型。
數據庫
Powershell 支持如下類型運算符
數組
運算符 |
說明 |
示例 |
-is | 若是對象是指定的 .Net Framework 類型則返回 TRUE,不然返回 FALSE | PS C:\> "abc" -is [string] Truebash |
-isnot | -is 運算符的對立面,若是對象不是指定的 .Net Framework 類型則返回 TRUE,不然返回 FALSE | PS C:\> "abc" -isnot [string] Falseide |
-as |
將對象轉換爲指定的 .Net Framework 類型。若是轉化成功,則返回轉換後的對象。若是轉換失敗,什麼也不返回(也不返回錯誤) |
PS C:\> "1234" -as [int] 1234spa PS C:\> "abc" -as [int]對象 PS C:\>blog |
類型運算符的語法以下:
ci
<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] 類型。