PowerShell';s等效于LINQ All,或者如何验证集合中的所有项是否等于特定值?

PowerShell';s等效于LINQ All,或者如何验证集合中的所有项是否等于特定值?,linq,powershell,Linq,Powershell,我有一个项目集合,我根据正则表达式匹配生成,如下所示: $collection = $input | foreach { if ($_ -match $regex) {$matches} else { return } } | Select-Object –Property @{name='command'; expression={$_.command} }, @{name='id'; expression={$_.i

我有一个项目集合,我根据正则表达式匹配生成,如下所示:

$collection = $input | foreach {
    if ($_ -match $regex) {$matches} else { return }
} | 
  Select-Object –Property @{name='command'; expression={$_.command} },
                          @{name='id';      expression={$_.id} }
(很抱歉,如果这不是最好的方法,我正在学习PowerShell:)

我要做的是确保此
$collection
中的所有
命令
属性都等于同一个命令,例如
“myCommand”
,我如何才能做到这一点

如果这是C#,我可能会这样做:

if (collection.All(item => item.Key == "myCommand")) { ... }
在PowerShell中执行此操作的惯用方法是什么?

有人向我指出了这一点,这使我可以简单地执行以下操作:

$collection | Linq-All { $_.command -eq "myCommand" }

这正是我所需要的!更多示例。

当数组中的所有项相等时,以下代码段返回
$true
。它所做的是:

  • 使用ForEach对象遍历对象数组
  • 使用compare-Object cmdlet将每一项与上一项进行比较
  • 如果Compare对象至少返回一次非null,这意味着被比较的两个对象不同,则代码段将返回
    $false
    ,否则
    $true

    将代码段应用于数组@(1,1,1,1,1,2)将返回
    $false
    ,因为最后一个项目

    @(1,1,1,1,1,2) |
        ForEach-Object -Begin { $last = $null; $result = $true } {
            if ($last -ne $null -and $result -and (Compare-Object $last $_) -ne $null) {
                $result = $false
            }
            $last = $_
        } -End { $result }
    

    所有相同的(无论命令是什么)或所有等同于给定的命令?@AndreyShchekin后者。我更新了标题,谢谢!我的第一个想法是
    ($collection |?{$\.command-ne'myCommand'}).Length-eq 0
    ,但这有点笨重,我会想得更多。