在我们的远程管理系统中,我们可以执行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
结果:
通缉输出:
感谢您的帮助!!!
答案 0 :(得分:1)
我没有得到短信&#39; celsius&#39;在表中(因为这些列的处理方式不同,但这里有一些代码可以按照你想要的方式分割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
答案 1 :(得分:0)
以下代码可能适合您。
[xml]$XmlDocument = get-content hplio.xml
foreach ($r in $XmlDocument.RIBCL.TEMPERATURE.TEMP) {
$info = [ordered]@{}
$info.LABEL = $r.LABEL.VALUE
$info.LOCATION = $r.LOCATION.VALUE
$info.STATUS = $r.STATUS.VALUE
$info.CURRENTREADING = $r.CURRENTREADING.VALUE + ' ' + $r.CURRENTREADING.UNIT
$info.CAUTION = $r.CAUTION.VALUE + ' ' + $r.CAUTION.UNIT
$info.CRITICAL = $r.CRITICAL.VALUE + ' ' + $r.CRITICAL.UNIT
$reading = New-Object -TypeName PSObject -Prop $info
Write-Output $reading
}
使用.\temp.ps1 | ft
LABEL LOCATION STATUS CURRENTREADING CAUTION CRITICAL
----- -------- ------ -------------- ------- --------
01-Inlet Ambient Ambient 0K 23 Celsius 42 Celsius 46 Celsius
02-CPU 1 CPU 0K 40 Celsius 70 Celsius N/A
03-CPU 2 CPU 0K 49 Celsius 70 Celsius N/A
答案 2 :(得分:0)
除了已经给出的答案。以下也有效。
[xml]$XmlDocument = get-content test.xml
$XmlDocument.RIBCL.TEMPERATURE.TEMP | Format-Table -Property @{LABEL="LABEL"; Expression={$_.LABEL.VALUE}},
@{LABEL="LOCATION"; Expression={$_.LOCATION.VALUE}},
@{LABEL="STATUS"; Expression={$_.STATUS.VALUE}},
@{LABEL="CURRENTREADING"; Expression={$_.CURRENTREADING.VALUE + " " + $_.CURRENTREADING.UNIT}},
@{LABEL="CAUTION"; Expression={$_.CAUTION.VALUE + " " + $_.CAUTION.UNIT}},
@{LABEL="CRITICAL"; Expression={$_.CRITICAL.VALUE + " " + $_.CRITICAL.UNIT}}