首页 > 解决方案 > 如果没有找到返回消息,请检查值

问题描述

我有这段代码使用自定义对象从数组中返回小于-5的值

$Results.Where({$_.Value -lt -5d})

返回我需要的值,但我无法编写一个条件,即如果上面的代码没有返回任何内容来编写消息。

“范围内的值”

我尝试了这样的事情,但它不起作用:

if(($Results.Where({$_.Value -lt -5d})) -eq 0)
{
    Write-host ('Values within range.')
}

标签: powershell

解决方案


使用该where方法时,您将返回一个集合。集合有一个名为的内置属性Count,可用于列出集合包含的对象数量。

if ($Results.Where({$_.Value -lt -5d}).Count -eq 0) {
# No objects are found
}

这种方法有一些潜在的警告。如果您的对象包含名为 的属性Count,则集合特定Count属性将在访问集合时覆盖它.Count。如果$Results是 single PSCustomObject$Results.Where()将失败。你需要先$Results变成一个集合:@($Results).Where().


在 PowerShell 7 中,您可以将三元运算符用于if-else场景。

$Results.Where({$_.Value -lt -5d}) ? "Objects Found" : "Objects not found"

推荐阅读