如果我运行以下程序,我会得到以下结果。
[string[]]$p = Get-Process Explorer |Select-Object -Property ID,Name,Handles,MainWindowTitle
$p
foreach($item in $p)
{
Write-Output $item
}
@{Id=3560; Name=explorer; Handles=1454; MainWindowTitle=C:}
@{Id=3868; Name=explorer; Handles=2787; MainWindowTitle=Y:}
@{Id=9468; Name=explorer; Handles=1823; MainWindowTitle=Z:}
问题01:这被认为是一个哈希表吗?
问题02:如何获取诸如MainWindowTitle之类的键的值?
问题03:如何筛选以68结尾的ID字段?
问题01:这被认为是一个哈希表吗?
否:您正在显式创建字符串数组([string[]]
(,这意味着Select-Object
发出的[pscustomobject]
实例基于Get-Process
输出的[System.Diagnostics.Process]
实例,是串化的。
字符串化的[pscustomobject]
使用与实际哈希表无关的类似于的的哈希表表示——请参阅此答案。
注:
-
这是一个用于显示、字符串的表示,不适合程序化处理,特别是因为有关属性的数据类型以及带空格的字符串属性值周围边界的信息会丢失。
-
因此,通常情况下,会避免处理对象的字符串表示,而倾向于按原样处理对象,从而实现稳健的基于属性的访问。
问题02:如何获取MainWindowTitle等键的值?
按原样使用Get-Process
输出的[System.Diagnostics.Process]
对象,这允许您访问它们的属性(不需要中间的Select-Object
调用(;以下示例使用成员访问枚举来检索所有.MainWindowTitle
属性值:
(Get-Process Explorer).MainWindowTitle
问题03:如何过滤以68结尾的ID字段?
在此基础上,使用简化语法的Where-Object
进行过滤:
Get-Process Explorer | Where-Object ID -like *68