首页 > 代码库 > (15)Powershell中的类型运算符

(15)Powershell中的类型运算符

    这节介绍 Powershell 中的类型运算符。


    Powershell 中的类型运算符可以与 .Net Framework 类型协同使用,可以用来判断一个对象是否是指定的 .Net Framework 类型的一个实例,或是判断一个对象是否可以转换为 .Net Framework 类型。

    Powershell 支持以下类型运算符

运算符
说明
示例
-is如果对象是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSEPS C:\> "abc" -is [string]

True

-isnot-is 运算符的对立面,如果对象不是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSEPS C:\> "abc" -isnot [string]

False

-as
将对象转换为指定的 .Net Framework 类型。如果转化成功,则返回转换后的对象。如果转换失败,什么也不返回(也不返回错误)
PS C:\> "1234" -as [int]

1234

PS C:\> "abc" -as [int]

PS C:\>

    类型运算符的语法如下:

<input> <operator> [.NET type]

    .Net type 也可以放在双引号中,即也可以使用如下语法:

<input> <operator> ".NET type"

    对于 System.DateTime 类型,可以输入 [DateTime] 或"datetime"。如果某个类型不在系统的根命名空间中,则需要指定该对象类型的全名。"System."命令空间可以省略。例如,若要指定 System.Diagnostics.Process,

    可以输入 [System.Diagnostics.Process]、[Diagnostics.Process] 或者"diagnostics.process"。

    类型运算符始终返回一个布尔值,即使输入对象是集合时也是如此。但是,如果输入是一个集合,那么类型运算符会匹配这一集合的 .NET Framework 类型。类型运算符不会匹配每个对象的类型,即使所有对象的类型完全一样时也是如此。

    要查找对象的 .NET Framework 类型,请使用将对象通过管道运算符(|)连接 Get-Member cmdlet。另外,也可以结合使用所有对象的GetType() 方法以及该方法的 FullName 属性,这个方法在Powershell中变量的类型介绍过。

    

    下面会举例说明这些运算符的用法


  1. -is 运算符的用法示例

PS C:\> 3 -is [Float]
False
PS C:\> 3 -is [int]
True
PS C:\> ( Get-Date ) -is [DateTime]
True
PS C:\> "20170111" -is [DateTime]
False
PS C:\> "01/11/2017" -is [DateTime]
False
PS C:\> "01/11/2017" -is [string]
True
PS C:\> (Get-Process powershell) -is [System.Diagnostics.Process]
True
PS C:\> (Get-Command Get-Member) -is [System.Management.Automation.CmdletInfo]
True

    下面的例子说明,如果输入的对象是集合时,判断的是集合的 .Net Framework 的类型,而不是集合中单个对象的类型。

PS C:\> (Get-Culture) -is [System.Globalization.CultureInfo]
True
PS C:\> (Get-Uiculture) -is [System.Globalization.CultureInfo]
True
PS C:\> (Get-Culture) , (Get-Uiculture) -is [System.Globalization.CultureInfo]
False
PS C:\> (Get-Culture) , (Get-Uiculture) -is [Array]
True
PS C:\> (Get-Culture) , (Get-Uiculture) | Foreach { $_ -is [System.Globalization.CultureInfo]}
True
True
PS C:\> (Get-Culture) , (Get-Uiculture) -is [Object]
True

    上面的例子中,虽然 Get-Culture 和 Get-UICulture cmdlet 都返回 System.Globalization

    .CultureInfo 对象,但是这些对象的集合却是一个 System.Object 数组。


2. -as 运算符的用法示例

PS C:\> "01/11/2017" -is [datetime]
False
PS C:\> "01/11/2017" -as [datetime]
2017年1月11日星期三 00:00:00
PS C:\> $date = "01/11/2017" -as [datetime]
PS C:\> $date -is [datetime]
True
PS C:\> 1031 -as [System.Globalization.CultureInfo]
LCID             Name             DisplayName
----             ----             -----------
1031             de-DE            德语(德国)

    另外上面也提到,当输入的对象用 -as 运算符无法转换为指定的 .Net Framework 类型时,什么也不输出。例如:

PS C:\> "shell" -as [int]
PS C:\>

总结

    -is 、-isnot 判断对象是否是指定的 .Net Framework 的实例,也可以用来判断指定的文件是否是文件或是文件夹。 -as 运算符是用来做类型转换的,例如在数据库查询到一个字符串时间,将其转换为 [DateTime] 类型。

本文出自 “花开花落” 博客,谢绝转载!

(15)Powershell中的类型运算符