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

时间:2017-02-03 12:39:37

标签: powershell where-clause

我正在尝试在PowerShell中编写一个where子句来检查$root是否包含ID等于$template的basetemplate。 我可以使用$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}

1 个答案:

答案 0 :(得分:2)

使用-in过滤所有基本模板包含$template的模板:

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