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