PowerShell中处理数据与排序结果:筛选时长超30天的NAME并存入数组
PowerShell 筛选AGE大于30天的NAME到数组解决方案
你之前使用的Select-Object用于提取指定属性列、Sort-Object用于排序,均不具备按条件过滤数据的能力,需要搭配Where-Object实现筛选逻辑。
操作步骤
1. 结构化数据场景($output为PowerShell标准对象集合,绝大多数场景适用)
直接执行以下命令即可得到存储符合条件NAME的数组:
$nameArray = $output | Where-Object { [int]($_.AGE -replace 'd$', '') -gt 30 } | Select-Object -ExpandProperty NAME
命令各部分说明:
Where-Object { [int]($_.AGE -replace 'd$', '') -gt 30 }:过滤逻辑,先移除AGE字段末尾的d字符,转换为整数后判断是否大于30Select-Object -ExpandProperty NAME:直接提取所有符合条件条目的NAME值,拼接为一维数组
执行完成后直接调用$nameArray即可查看结果。
2. 纯文本返回场景($output为命令返回的原始字符串)
如果你的$output是直接捕获的命令输出纯文本,需要先将其转换为结构化对象再执行过滤:
# 先将纯文本转换为PS自定义对象 $structuredOutput = $output | Where-Object { $_ -notmatch '^NAME\s+STATUS\s+AGE' -and $_ -notmatch '^\s*$' } | ForEach-Object { $segments = $_ -split '\s+', 3 [PSCustomObject]@{ NAME = $segments[0].Trim() STATUS = $segments[1].Trim() AGE = $segments[2].Trim() } } # 再执行过滤获取NAME数组 $nameArray = $structuredOutput | Where-Object { [int]($_.AGE -replace 'd$', '') -gt 30 } | Select-Object -ExpandProperty NAME
内容的提问来源于stack exchange,提问作者Kerbol
相关产品推荐
相关产品推荐

