about_Type_Operators
应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0
主题
about_Type_Operators
简短说明
介绍使用 .NET Framework 类型的运算符。
详细说明
布尔类型运算符(-is 和 -isNot)指示一个对象是否为指定 .NET Framework 类型的实例。如果类型匹配,则 -is 运算符返回值 TRUE,否则返回值 FALSE。如果类型匹配,则 -isNot 运算符返回值 FALSE,否则返回值 TRUE。
-as 运算符尝试将输入对象转换为指定的 .NET Framework 类型。如果成功,它将返回转换后的对象。如果失败,则不会返回任何内容。它不返回任何错误。
下表列出了 Windows PowerShell® 中的类型运算符。
Operator Description Example
-------- ------------------------ -------------------------------------
-is Returns TRUE when the C:\PS> (get-date) -is [DateTime]
input is an instance True
of the specified
.NET Framework type.
-isNot Returns TRUE when the C:\PS> (get-date) -isNot [DateTime]
input is not an instance False
of the specified
.NET Framework type.
-as Converts the input to C:\PS> 12/31/07 -as [DateTime]
the specified Monday, December 31, 2007 12:00:00 AM
.NET Framework type.
类型运算符的语法如下所示:
<input> <operator> [.NET type]
也可以使用下面的语法:
<input> <operator> ".NET type"
若要指定 .NET Framework 类型,请将类型名称括在方括号 ([]) 中,或以字符串的形式输入类型(例如,输入 [DateTime] 或“DateTime”表示 System.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.Process]
True
C:\PS> (get-command get-member) -is [System.Management.Automation.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 German (Germany)
以下示例显示,当 -as 运算符无法将输入对象转换为 .NET Framework 类型时,它不返回任何内容。
C:\PS> 1031 -as [System.Diagnostic.Process]
C:\PS>
另请参阅
about_Operators