簡短描述
描述使用Microsoft .NET 類型的運算符。
完整描述
布爾型別運算子 (-is 和 -isnot) 會指出物件是否為指定 .NET 類型的實例。 如果型別符合,-is 運算子會傳回值 true,否則傳回值 false。 如果型別相符,-isnot 運算符會傳回 false,否則會傳回 true。
-as 運算子會嘗試將輸入物件轉換成指定的 .NET 類型。 如果成功,則會傳回已轉換的物件。 如果失敗,則會傳回 $null。 系統不會傳回錯誤。
PowerShell 具有下列類型運算子:
-is|當輸入是指定之 .NET 類型的實例時,傳回TRUE。(Get-Date) -is [datetime] # Result is True-isnot|當輸入不是指定的.NET 類型的實例時,傳回 TRUE。(Get-Date) -isnot [datetime] # Result is False-as|將輸入轉換為指定的 .NET 類型。"5/7/07" -as [datetime] # Result is Monday, May 7, 2007 12:00:00 AM
類型運算子的語法如下所示:
<input> <operator> [.NET type]
您也可以使用下列語法:
<input> <operator> ".NET type"
.NET 類型可以在方括弧或字串中寫入為類型名稱,例如 [datetime] 或 "DateTime"System.DateTime。 如果類型不在系統命名空間的根目錄,請指定物件類型的完整名稱。 您可以省略 「System.」。。 例如,若要指定 System.Diagnostics.Process
類型運算元一律會以整體方式在輸入物件上操作。 也就是說,如果輸入物件是集合,則測試的是集合的 類型 ,而不是集合 項目的類型。
-is/isnot 運算符
即使輸入是物件的集合,布爾值 類型運算符(-is 和 -isnot)一律會傳回 布爾值 值。
如果 <input> 的類型與 .NET 類型相同或 衍生,-is 運算符會傳回 $true。
例如,DirectoryInfo 類型衍生自 FileSystemInfo 類型。 因此,這兩個範例都會傳回 true。
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
如果 -is 實作比較中的介面,<input> 運算符也可以比對接口。 在此範例中,輸入是陣列。 陣組會實作 System.Collections.IList 介面。
PS> 1, 2 -is [System.Collections.IList]
True
-as 運算子
-as 運算子會嘗試將輸入物件轉換成指定的 .NET 類型。 如果成功,則會傳回已轉換的物件。 如果失敗,則會傳回 $null。 系統不會傳回錯誤。
如果 <input> 是 從 .NET 類型衍生 的類型,-as會通過 傳回未變更的輸入物件。 例如,DirectoryInfo 類型衍生自 FileSystemInfo 類型。 因此,在下列範例中,物件類型不會變更:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
轉換 DateTime 類型會依賴文化設定
不同於類型轉換,使用 [datetime] 運算元轉換成 -as 類型,僅適用於依照當前文化規則格式化的字串。
PS> [cultureinfo]::CurrentCulture = 'fr-FR'
PS> '13/5/20' -as [datetime]
mercredi 13 mai 2020 00:00:00
PS> '05/13/20' -as [datetime]
PS> [datetime]'05/13/20'
mercredi 13 mai 2020 00:00:00
PS> [datetime]'13/05/20'
InvalidArgument: Cannot convert value "13/05/20" to type "System.DateTime".
Error: "String '13/05/20' was not recognized as a valid DateTime."
若要尋找物件的 .NET 類型,請使用 Get-Member Cmdlet。 或者,請同時使用所有物件的 GetType 方法和這個方法的 FullName 屬性。 例如,下列語句會取得 Get-Culture 命令的傳回值類型:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
範例
下列範例顯示類型運算子的一些用法:
PS> 32 -is [float]
False
PS> 32 -is "int"
True
PS> (Get-Date) -is [datetime]
True
PS> "12/31/2007" -is [datetime]
False
PS> "12/31/2007" -is [string]
True
PS> (Get-Process powershell)[0] -is [System.Diagnostics.Process]
True
PS> (Get-Command Get-Member) -is [System.Management.Automation.CmdletInfo]
True
下列範例顯示當輸入是 物件的集合時,比對類型是集合的 .NET 類型,而不是集合中個別物件的型別。
在此範例中,雖然 Get-Culture 和 Get-UICulture Cmdlet 都會傳回 System.Globalization.CultureInfo 物件,但這些物件的集合是 System.Object 陣列。
PS> (Get-Culture) -is [System.Globalization.CultureInfo]
True
PS> (Get-UICulture) -is [System.Globalization.CultureInfo]
True
PS> (Get-Culture), (Get-UICulture) -is [System.Globalization.CultureInfo]
False
PS> (Get-Culture), (Get-UICulture) -is [array]
True
PS> (Get-Culture), (Get-UICulture) | foreach {
$_ -is [System.Globalization.CultureInfo])
}
True
True
PS> (Get-Culture), (Get-UICulture) -is [Object]
True
下列範例示範如何使用 -as 運算符。
PS> "12/31/07" -is [datetime]
False
PS> "12/31/07" -as [datetime]
Monday, December 31, 2007 12:00:00 AM
PS> $date = "12/31/07" -as [datetime]
C:\PS>$a -is [datetime]
True
PS> 1031 -as [System.Globalization.CultureInfo]
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
下列範例顯示當 -as 運算子無法將輸入物件轉換成 .NET 類型時,它會傳回 $null。
PS> 1031 -as [System.Diagnostics.Process]
PS>