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