(15)Powershell中的類型運算符

    這節介紹 Powershell 中的類型運算符。


    Powershell 中的類型運算符可以與 .Net Framework 類型協同使用,可以用來判斷一個對象是否是指定的 .Net Framework 類型的一個實例,或是判斷一個對象是否可以轉換爲 .Net Framework 類型。

    Powershell 支持以下類型運算符

運算符
說明
示例
-is如果對象是指定的 .Net Framework 類型則返回 TRUE,否則返回 FALSEPS C:\> "abc" -is [string]

True

-isnot-is 運算符的對立面,如果對象不是指定的 .Net Framework 類型則返回 TRUE,否則返回 FALSEPS 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中變量的類型介紹過。

    

    下面會舉例說明這些運算符的用法


  1. -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] 類型。

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