主题
    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




目录