zhang-snail

导航

 

(15)Powershell中的类型运算符

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


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

Powershell 支持以下类型运算符

类型运算符的语法如下:

<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:\Windows\System32\WindowsPowerShell\v1.0> 3 -is [Float]
False

PS C:\Windows\System32\WindowsPowerShell\v1.0> 3 -is [int]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> ( Get-Date ) -is [DateTime]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> "20170111" -is [DateTime]
False

PS C:\Windows\System32\WindowsPowerShell\v1.0>  "01/11/2017" -is [DateTime]
False

PS C:\Windows\System32\WindowsPowerShell\v1.0> "01/11/2017" -is [string]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Command Get-Member) -is [System.Management.Automation.CmdletInfo]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Process NetworkCap) -is [System.Diagnostics.Process]
True

下面的例子说明,如果输入的对象是集合时,判断的是集合的 .Net Framework 的类型,而不是集合中单个对象的类型。
PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Culture) -is [System.Globalization.CultureInfo]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0>  (Get-Uiculture) -is [System.Globalization.CultureInfo]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0>  (Get-Culture) , (Get-Uiculture) -is [System.Globalization.CultureInfo]
False

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Culture) , (Get-Uiculture) -is [Array]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Culture) , (Get-Uiculture) | Foreach { $_ -is [System.Globalization.CultureInfo]}
True
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Culture) , (Get-Uiculture) -is [Object]
True

上面的例子中,虽然 Get-Culture 和 Get-UICulture cmdlet 都返回 System.Globalization.CultureInfo 对象,但是这些对象的集合却是一个 System.Object 数组。

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

PS C:\Windows\System32\WindowsPowerShell\v1.0> "01/11/2017" -is [datetime]
False

PS C:\Windows\System32\WindowsPowerShell\v1.0> "01/11/2017" -as [datetime]

2017年1月11日 0:00:00

PS C:\Windows\System32\WindowsPowerShell\v1.0> $date = "01/11/2017" -as [datetime]

PS C:\Windows\System32\WindowsPowerShell\v1.0> $date -is [datetime]
True

PS C:\Windows\System32\WindowsPowerShell\v1.0> 1031 -as [System.Globalization.CultureInfo]

LCID             Name             DisplayName                                                                                                                                                                                                                    
----             ----             -----------                                                                                                                                                                                                                    
1031             de-DE            German (Germany)                                                                                                                                                                                                               

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

PS C:\Windows\System32\WindowsPowerShell\v1.0> "shell" -as [int]

PS C:\Windows\System32\WindowsPowerShell\v1.0> 


判断路径是PowerShell中的文件夹还是文件



总结

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

posted on 2024-01-22 11:30  zhang-snail  阅读(6)  评论(0编辑  收藏  举报