Powershell 使用Where对象从XML中筛选数据

Powershell 使用Where对象从XML中筛选数据,powershell,Powershell,我有一个XML文件,其中包含关于包含包的序列的数据。 我正在尝试获取包含失败包信息的powershell对象。(False) 下面是包含示例数据的XML文件的结构。(简化,希望还是真实的… 您还可以找到用于筛选失败包的代码: [xml]$Xml = @" <?xml version="1.0" encoding="utf-8"?> <Sequences> <Sequence> <SequenceName>Sequence1</Se

我有一个XML文件,其中包含关于包含包的序列的数据。 我正在尝试获取包含失败包信息的powershell对象。(
False

下面是包含示例数据的XML文件的结构。(简化,希望还是真实的…
您还可以找到用于筛选失败包的代码:

[xml]$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Sequences>
  <Sequence>
    <SequenceName>Sequence1</SequenceName>
    <SequencePackages>
      <Package>
        <PackageName>Package1</PackageName>
        <PackageMeta>
          <PackageSuccess>True</PackageSuccess>
        </PackageMeta>
      </Package>
      <Package>
        <PackageName>Package2</PackageName>
        <PackageMeta>
          <PackageSuccess>False</PackageSuccess>
        </PackageMeta>
      </Package>
    </SequencePackages>
    <SequenceMeta>
      <Finished>True</Finished>
    </SequenceMeta>
  </Sequence>
  <Sequence>
    <SequenceName>Sequence2</SequenceName>
    <SequencePackages>
      <Package>
        <PackageName>Package3</PackageName>
      </Package>
    </SequencePackages>
  </Sequence>
</Sequences>
"@

Clear-Host

$ProcessedSequences = $Xml.Sequences.Sequence | Where-Object { $_.SequenceMeta.Finished -eq $true }
$FailedPackages = $ProcessedSequences.SequencePackages.Package | Where-Object { $_.PackageMeta.PackageSuccess -ne "True" }
$FailedPackages
这在某种程度上是可以的,但我还希望在输出中包含SequenceName,如下所示:

PackageName PackageSuccess SequenceName
----------- -----------    -----------
Package2    False          Sequence1
我没能找到一个干净的解决办法


谢谢

将计算属性与
选择对象
一起使用,并使用元素上的
ParentNode
属性向上走到包含
SequenceName
元素的祖先节点:

$FailedPackages |Select-Object PackageName,PackageMeta,@{Name='SequenceName';Expression={$_.ParentNode.ParentNode.SequenceName}}

非常感谢。我以前从来没有听说过使用
$\uuu0.ParentNode
的事。
$FailedPackages |Select-Object PackageName,PackageMeta,@{Name='SequenceName';Expression={$_.ParentNode.ParentNode.SequenceName}}