You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Where-Object过滤System.Array数组,排除Env字段为空或Null的记录

如何使用Where-Object过滤System.Array数组,排除Env字段为空或Null的记录

兄弟,你这问题根源在于逻辑运算符用错啦!你写的-or会导致空Env的记录被意外保留,咱们来一步步捋清楚:

你的错误原因

你之前的过滤语句:

$serverEnv | where-object { $_.Env -ne $null -or $_.Env -ne "" }

这里用-or意味着只要满足其中一个条件就会保留记录。比如当Env是空字符串时,$_.Env -ne $null是true,所以这条记录会被留下来;同样,当Env是null时,$_.Env -ne ""是true,也会被保留。这就是为什么你还是能看到空Env的条目。

正确的过滤写法

给你三种可行的方案,按需选择:

方案1:修正逻辑运算符为-and

要排除“Env是null”并且“Env是空字符串”的记录,正确的逻辑应该是两个条件都不满足,所以用-and:

$serverEnv | Where-Object { $_.Env -ne $null -and $_.Env -ne "" }

方案2:利用PowerShell的隐式布尔转换

在PowerShell里,null、空字符串""都会被视为false,所以直接判断$_.Env是否为“真”即可,写法更简洁:

$serverEnv | Where-Object { $_.Env }

方案3:使用.NET静态方法明确判断

如果想要更清晰地表达“排除空或null的字符串”,可以用[string]::IsNullOrEmpty()方法,取反即可:

$serverEnv | Where-Object { -not [string]::IsNullOrEmpty($_.Env) }

执行后你会得到期望的结果:

ComputerName Env


server1 PROD
server2 PROD

备注:内容来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:25:30