about_type_operators
主题
about_Type_Operators
简短说明
说明运算符如何与 Microsoft .NET Framework 类型协同使用。
详细说明
布尔类型运算符(-is 和 -isnot)用来判断一个对象是否是指定的 .NET Framework 类型的一个实例。如果类
型匹配,-is 返回值为 True;否则返回值为 False。如果类型匹配,-isnot 返回值为 False;否则返回值为
True。
-as 运算符会尝试将输入对象转换为指定的 .NET Framework 类型。如果成功,那么返回转换后的对象。如果失
败,则什么也不返回。也不返回错误。
以下表格列出了 Windows PowerShell 支持的类型运算符。
运算符 说明 示例
-------- ------------------------ --------------
-is 当输入是一个指定的 C:\PS> (get-date) -is [datetime]True
.NET Framework 类型
实例时返回 True。
-isnot 当输入不是一个指定的 C:\PS> (get-date) -isnot [datetime]False
.NET Framework 类型
实例时返回 True。
-as 将输入转换为指定的 C:\PS> 12/31/07 -as [datetime]Monday,
.NET Framework 类型。 December 31, 2007 12:00:00 AM
类型运算符的语法如下:
<input> <operator> [.NET type]
也可以使用以下语法:
<input> <operator> ".NET type"
要指定 .NET Framework 类型,可用中括号 ([ ]) 将类型名字括起来,或者以字符串方式输入类型。例如:
对于 System.DateTime 类型,可以输入 [DateTime] 或“datetime”。如果某个类型不在系统的根命名空间
中,那么就要指定该对象类型的全名。“System.”部分可以省略。例如,若要指定 System.Diagnostics.Process,
可以输入 [System.Diagnostics.Process]、[Diagnostics.Process] 或者"diagnostics.process"。
类型运算符始终返回一个布尔值,即使输入是一个对象的集合时也是如此。但是,如果输入是一个集合,那么类型运
算符会匹配这一集合的 .NET Framework 类型。类型运算符不会匹配每个对象的类型,即使所有对象的类型完全一样
时也是如此。
要查找对象的 .NET Framework 类型,请使用 Get-Member cmdlet。另外,也可以结合使用所有对象的
GetType 方法以及该方法的 FullName 属性。例如,下面的语句可以获取 Get-Culture 命令返回值的类型:
C:\PS> (get-culture).gettype().fullname
System.Globalization.CultureInfo
示例
以下示例演示类型运算符的一些用法:
C:\PS> 32 -is [Float]
False
C:\PS> 32 -is "int"
True
C:\PS> (get-date) -is [DateTime]
True
C:\PS> "12/31/2007" -is [DateTime]
False
C:\PS> "12/31/2007" -is [String]
True
C:\PS> (get-process powershell)[0] -is [System.Diagnostics.Pro
cess]
True
C:\PS> (get-command get-member) -is [System.Management.Automat
ion.CmdletInfo]
True
以下示例演示的是当输入是一个对象集合时,匹配的类型是该集合的 .NET Framework 类型,而非集合中单个对
象的类型。
本例中,虽然 Get-Culture 和 Get-UICulture cmdlet 都返回 System.Globalization
.CultureInfo 对象,但是这些对象的集合却是一个 System.Object 数组。
C:\PS> (get-culture) -is [System.Globalization.CultureInfo]
True
C:\PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True
C:\PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False
C:\PS> (get-culture), (get-uiculture) -is [Array]
True
C:\PS> (get-culture), (get-uiculture) | foreach {$_ -is [System.Globalization.CultureInfo])
True
True
C:\PS> (get-culture), (get-uiculture) -is [Object]
True
以下示例说明如何使用 -as 运算符。
C:\PS> "12/31/07" -is [datetime]
False
C:\PS> "12/31/07" -as [datetime]
Monday, December 31, 2007 12:00:00 AM
C:\PS> $date = "12/31/07" -as [datetime]
C:\PS>$a -is [datetime]
True
C:\PS> 1031 -as [System.Globalization.CultureInfo]
LCID Name DisplayName
---- ---- -----------
1031 de-DE 德语 <德国>
以下示例演示了当 -as 运算符无法将输入对象转换为 .NET Framework 类型时,它什么也不会返回。
C:\PS> 1031 -as [System.Diagnostic.Process]
C:\PS>
另请参阅
about_Operators