【问题标题】:Filter (xml-)Data with Where-Object on Sub-Property in PowerShell在 PowerShell 中的子属性上使用 Where-Object 过滤(xml-)数据
【发布时间】:2019-07-24 00:34:28
【问题描述】:

我在 PowerShell 中有以下代码:

[xml]$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Sequences>
  <Sequence>
    <SequenceName>Sequence-A</SequenceName>
    <SequenceMeta>
      <SequenceStart>2019-07-23T17:26:54.710+02:00</SequenceStart>
      <SequenceEnd>2019-07-23T17:26:54.741+02:00</SequenceEnd>
    </SequenceMeta>
  </Sequence>
  <Sequence>
    <SequenceName>Sequence-B</SequenceName>
    <SequenceMeta>
      <SequenceStart></SequenceStart>
      <SequenceEnd></SequenceEnd>    
    </SequenceMeta>
  </Sequence>
</Sequences>
"@

Clear-Host
$Sequences = $Xml.Sequences.Sequence | Where-Object -Property SequenceMeta.SequenceEnd
$Sequences

Remove-Variable -Name Xml

如您所见,我加载了 XML-Data,然后我想使用“Where-Object”对其进行过滤。 我想选择那些“Sequence(s)”,其中属性“SequenceEnd”有一个值。

在本例中,结果应为“Sequence-A”。 “Sequence-B”不应显示在结果中,因为“SequenceEnd”-属性没有值。

我不知道如何选择子属性“Sequence-End”。我像“SequenceMeta.SequenceEnd”一样尝试过,但如您所见,这不起作用。

我正在寻找单线。实际上查询会更长。

谢谢

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用以下内容:

    $Sequences = $xml.Sequences.Sequence | Where-Object {$_.SequenceMeta.SequenceEnd}
    $Sequences
    

    由于Where-Object 脚本块{} 中的内容是一个条件表达式,特别是比较,没有值的属性将产生$false,当没有比较运算符时,有值的属性将产生$true当下。 Where-Object 返回脚本块语句为真的所有对象。

    使用Where-Object 的语法有一些限制,这是比较语句的语法。首先,您只能引用您正在管道的对象中可用的第一级属性。换句话说,您只能比较SequenceMeta 而不是SequenceMeta.SequenceEnd。代码$xml.Sequences.Sequence.SequenceMeta | Where-Object -Property SequenceEnd 将返回一个对象,但它将位于SequenceMeta 属性级别而不是其父对象,可以使用get_ParentNode 类可用的get_ParentNode 方法检索该对象。见下文。

    $Sequences = $xml.Sequences.Sequence.SequenceMeta | Where-Object -Property SequenceEnd
    $Sequences.get_ParentNode()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多