【发布时间】:2022-01-01 03:39:37
【问题描述】:
我在处理从 PowerShell 查询返回的数据时遇到问题。
我的目标是获取所有超过 30 天 (>30d) 的 NAME。
之后,我想将这些结果的名称加载到一个数组中。
我的查询返回的数据如下:
PS C:\Users\> $output
NAME STATUS AGE
dread-gorge Active 284d
dread-lagoon Active 210d
carncier-basin Active 164d
chantague-shallows Active 164d
hilraine-loch Active 311d
stangrave-waters Active 271d
运行“选择对象”或“排序对象”来过滤输出不起作用。
$output | Select-Object -Property NAME
$output | Sort-Object NAME
【问题讨论】:
-
看起来
$output包含一个或多个字符串,而不是结构化对象。您最初是如何获得这些数据的? -
这是我在 Powershell 中运行的 kubectl 查询的输出。所以,它的原始格式是 JSON。
-
在这种情况下,您可能希望使用
--output=json运行查询并将其通过管道传输到ConvertFrom-Json -
你可以做类似
@($output -split '\r?\n' |Select -Skip 1 |ForEach-Object Trim) -replace '\s.+$' -
如果输出确实是空格分隔的数据,您可以跳过输出的第一行(列名)并使用正则表达式来获取每行的第一个标记。但是(正如 Mathias 指出的那样)如果可能的话,最好将其解析为 json 数据(更精确、更直接、更不容易出错)。
标签: powershell kubectl text-parsing