首页 > 代码库 > (15)Powershell中的类型运算符
(15)Powershell中的类型运算符
这节介绍 Powershell 中的类型运算符。
Powershell 中的类型运算符可以与 .Net Framework 类型协同使用,可以用来判断一个对象是否是指定的 .Net Framework 类型的一个实例,或是判断一个对象是否可以转换为 .Net Framework 类型。
Powershell 支持以下类型运算符
运算符 | 说明 | 示例 |
-is | 如果对象是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSE | PS C:\> "abc" -is [string] True |
-isnot | -is 运算符的对立面,如果对象不是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSE | PS 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中变量的类型介绍过。
下面会举例说明这些运算符的用法
-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中的类型运算符