我正在尝试使用Powershell脚本从数据对象类型XML打印键值对。
<?xml version="1.0"?>
<Objects>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="Display" Type="System.String">Microsoft</Property>
<Property Name="Service" Type="Microsoft.Management.Service">Database</Property>
</Object>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="Display" Type="System.String">Microsoft</Property>
<Property Name="Service" Type="Microsoft.Management.Service">RPC</Property>
</Object>
</Objects>
这是使用的脚本。
[xml]$file = Get-Content C:\xml-report.xml
foreach ($obj in $file.Objects.Object) {
echo $obj.Display;
echo $obj.Service;
}
我应该如何遍历每个键(显示,服务)并仅打印那些键的值,即
Microsoft
Database
Microsoft
RPC
我现在得到的输出如下。有人可以帮助我吗?
Object
Object
Object
答案 0 :(得分:3)
当您尝试显式访问名为Service
和Display
的属性时,以下是直接访问这些属性的解决方案,以防您的xml文件包含更多您不关心的元素:
foreach ($obj in $file.Objects.Object.Property) {
if('Display','Service' -contains $obj.Name) {
write-output $obj.'#text'
}
}
或者在一行中:
$file.Objects.Object.Property | ? { 'Display','Service' -contains $_.name } | Select '#text'
答案 1 :(得分:0)
您只是省略了Property元素。你的循环可以稍作修改:
[xml]$file = Get-Content "C:\temp\xml-report.xml"
foreach ($obj in $file.Objects.Object)
{
$obj.Property | % { $_.'#text' }
}
答案 2 :(得分:0)
If you are using Powershell version 3 or above you could try use this:
[xml]$file = Get-Content C:\xml-report.xml
$file.Objects.Object.Property.'#text'