PowerShell列表过滤及获取Name值返回空的问题求助
问题解答
一、$apa返回空值的原因
你的代码里,$apa在每次循环中都会被覆盖成当前$secret的Name值,循环结束后它只保留最后一个元素的Name。出现空值大概率是以下两种情况:
$secrets本身是空集合,循环根本没执行,$apa一直处于未赋值的空状态;$secrets的最后一个元素没有Name属性,或者该元素的Name字段本身就是空值。
另外,如果你原本想收集所有元素的Name值,当前写法完全错误——应该用数组存储所有结果,而非每次覆盖单个变量。推荐两种正确写法:
# 方式1:初始化空数组后逐个添加 $apa = @() foreach ($secret in $secrets) { $apa += $secret.Name } # 方式2:管道+Select-Object(更高效简洁) $apa = $secrets | Select-Object -ExpandProperty Name
二、PowerShell中根据值过滤列表
使用Where-Object(可简写为?)对集合进行过滤,以下是常见场景示例:
- 筛选
Name等于指定值的元素:
$filteredSecrets = $secrets | Where-Object { $_.Name -eq "TestSecret" }
- 筛选
Name包含指定字符串的元素(不区分大小写):
$filteredSecrets = $secrets | Where-Object { $_.Name -like "*secret*" }
- 筛选
ID大于某个数值的元素:
$filteredSecrets = $secrets | Where-Object { $_.ID -gt 10 }
- 同时满足多个过滤条件(比如
Name包含"prod"且ID小于20):
$filteredSecrets = $secrets | Where-Object { $_.Name -like "*prod*" -and $_.ID -lt 20 }
内容的提问来源于stack exchange,提问作者moris62
相关产品推荐
相关产品推荐

