主题 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 German (Germany) 以下示例演示了当 -as 运算符无法将输入对象转换为 .NET Framework 类型时,它什么也不会返回。 C:\PS> 1031 -as [System.Diagnostic.Process] C:\PS> 另请参阅 about_Operators