我有一个项目集合,我从正则表达式匹配中构建,如下所示:
$collection = $input | foreach {
if ($_ -match $regex) {$matches} else { return }
} |
Select-Object –Property @{name='command'; expression={$_.command} },
@{name='id'; expression={$_.id} }
(对不起,如果这不是最好的方法,我正在学习PowerShell :))
我要做的是确保此command
中的所有$collection
属性都等于相同的命令,例如"myCommand"
,我该怎么做?
如果这是C#,我可能会做类似的事情:
if (collection.All(item => item.Key == "myCommand")) { ... }
在PowerShell中执行此操作的惯用方法是什么?
答案 0 :(得分:1)
当数组中的所有项目相同时,以下代码段会返回$true
。它的作用是:
如果Compare-Object至少返回一次非空值,这意味着要比较的两个对象不同,则代码段将返回$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 }
答案 1 :(得分:0)
我被指向这个LINQ Module for PowerShell,这让我可以做到:
$collection | Linq-All { $_.command -eq "myCommand" }
这正是我所需要的!更多示例here。