在我们的远程管理系统中,我们可以执行HPiLOcmdlet来从HP服务器中的iLO硬件管理卡中检索数据。
例:
$tempstatus = Get-HPiLOTemperature -Server $server -Username $Username -Password $Password -Output XML
这将生成一个XML文件,我想将其用作Powershell中的表的输入和输出
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<RIBCL VERSION="2.23">
<TEMPERATURE>
<TEMP>
<LABEL VALUE="01-Inlet Ambient" />
<LOCATION VALUE="Ambient" />
<STATUS VALUE="0K" />
<CURRENTREADING VALUE="23" UNIT="Celsius" />
<CAUTION VALUE="42" UNIT="Celsius" />
<CRITICAL VALUE="46" UNIT="Celsius" />
</TEMP>
<TEMP>
<LABEL VALUE="02-CPU 1" />
<LOCATION VALUE="CPU" />
<STATUS VALUE="0K" />
<CURRENTREADING VALUE="40" UNIT="Celsius" />
<CAUTION VALUE="70" UNIT="Celsius" />
<CRITICAL VALUE="N/A" />
</TEMP>
<TEMP>
<LABEL VALUE="03-CPU 2" />
<LOCATION VALUE="CPU" />
<STATUS VALUE="0K" />
<CURRENTREADING VALUE="49" UNIT="Celsius" />
<CAUTION VALUE="70" UNIT="Celsius" />
<CRITICAL VALUE="N/A" />
</TEMP>
</TEMPERATURE>
</RIBCL>
到目前为止,我尝试了:
[xml]$XmlDocument = get-content test.xml
$XmlDocument.RIBCL.TEMPERATURE.ChildNodes | Format-Table
结果:
想要的输出:
谢谢你的帮助 !!!
最佳答案
我没有在表中得到文本“celsius”(因为这些列的处理方式不同,但是这里有一些代码可以按照您想要的方式拆分xml。它只是使用值创建新对象
[xml]$XmlDocument = get-content test.xml
$XmlDocument.RIBCL.Temperature.TEMP | foreach-object {
$obj=[ordered]@{}
foreach($node in $_.ChildNodes){
$obj[$node.Name]=($node.Value+ " " + $node.Unit).Trim()
}
write-output ([pscustomobject]$obj)
} | format-table
关于xml - Powershell XML文件到 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845939/