如何在 PowerShell 中编写深度 where 子句

How to write a deep where clause in PowerShell

我正在尝试在 PowerShell 中编写一个 where 子句来检查 $root 是否包含 ID 等于 $template 的基本模板。 我可以使用 $item.Template.BaseTemplates[x].ID.

访问项目的基本模板

在 C# 中我可以这样写

items.Where(item => item.BaseTemplates.Any(template => template.ID == "id");

那么我如何将其转换为 PowerShell?

$root = Get-Item .
$template = "{E54BB0A6-C296-4D35-BE6A-93E71E2B9F52}"
#Write-Host $root.Template.BaseTemplates[0].ID
$items = Get-ChildItem -recurse -Path $root.FullPath -Language *

#how to do the same query on these $items?
$filteredItems = items | Where-Object { $_.Template.BaseTemplates???.ID -eq $template}

使用 -in 过滤所有包含您的 $template:

的模板
$filteredItems = items | Where-Object { $template -in $_.Template.BaseTemplates.ID}