【发布时间】:2021-07-09 16:34:14
【问题描述】:
我在 Windows 8.1 上运行 PowerShell 4.0 版
我有一个名为 flow1.xml 的 xml 文档(来自 nifi 流),如下所示:
<flowController encoding-version="1.3">
<rootGroup>
<id>123</id>
<name>BigTime</name>
<position x="0.0" y= "0.0"/>
<processGroup>
<id>456</id>
<name>SmallTime</name>
<position x="1000.0" y="2000.0"/>
<processGroup>
<id>789</id>
<name>TinyTime</name>
<position x="3000.0" y="4000.0"/>
</processGroup>
<processGroup/>
</rootGroup>
</flowController>
我有一个 powerShell 脚本 test.ps1 如下:
$filePath='flow1.xml'
$xmlDocument = New-Object -TypeName XML
$xmlDocument.Load($filePath)
$xmlDocument.flowController.rootGroup.processGroup |
Where-Object { $_.name -eq 'SmallTime'} |
Select-Object -Property {$_.id}
$xmlDocument.flowController.rootGroup.processGroup.processGroup |
Where-Object { $_.name -eq 'TinyTime'} |
Select-Object -Property {$_.id}
我在 Windows Cmd 框中从 PowerShell 运行;即 PS C\Temp>test.ps 当我运行它时,我得到了预期的输出:
Output:
$_.id
-----
456
789
当我更改第二个 Select_Object 时:
$xmlDocument.flowController.rootGroup.processGroup.processGroup |
Where-Object { $_.name -eq 'TinyTime'} |
Select-Object -Property {$_.name}
我明白了
Output:
$_.id
-----
456
我只从第一个子句中得到 $_id,而不是从第二个子句中得到 $_name。一般情况是 - 如果两个 Select-Object 语句都选择相同的参数,则两者都正确执行。例如,如果两个 Select-Object 语句都是 Select-Object -Property {$_.name} 我得到输出:
Output:
$_.name
-----
SmallTime
TinyTime
如果 Select-Object 语句不同,它似乎只执行第一个语句。 我尝试在第二个 Select-Object 之前再次阅读 xmlDocument :
$filePath='flow1.xml'
$xmlDocument = New-Object -TypeName XML
$xmlDocument.Load($filePath)
$xmlDocument.flowController.rootGroup.processGroup |
Where-Object { $_.name -eq 'SmallTime'} |
Select-Object -Property {$_.id}
$xmlDocument = New-Object -TypeName XML
$xmlDocument.Load($filePath)
$xmlDocument.flowController.rootGroup.processGroup.processGroup |
Where-Object { $_.name -eq 'TinyTime'} |
Select-Object -Property {$_.id}
但同样的事情也会发生。我只得到第一个 Select-Object 语句的结果。
有人知道为什么会这样吗?
【问题讨论】:
-
您的 Powershell 代码中有拼写错误 -
.eq可能应该是-eq,$可能应该是$_在几个位置。仔细检查您的代码。 -
很多个错别字,你是不是在发帖前不小心删除了所有
_的?
标签: xml powershell powershell-4.0 select-object