我有一个脚本,它利用PowerShell来解析XML数据并导出为XLS格式。当XML不复杂时,该脚本可以工作。但是,当节点具有多个属性时,它不会。
目前,要获取我使用的节点属性:
$Switch = $xml.DC.Rack[$i] | %{$_.NetworkSwitch} | Select-Object -Unique
但是,我需要获取位置,地址和Vlan详细信息。以下是节点的示例:
<NetworkSwitch Location="ABC" Address="XX.XXX.XXX.XX" Vlan="YY" />
这是我PS1的副本:
$xmlFile = "D:\My.xml"
$xPath = "//Rack"
[xml]$xml = Get-Content $xmlFile -Raw
$NodeCount = $xml.SelectNodes($xPath).Count
for ($i = 1; $i -le $NodeCount; $i++)
{
$Switch = $xml.DC.Rack[$i] | %{$_.NetworkSwitch} | Select-Object -Unique
Write-Host "$($Switch)"
}
答案 0 :(得分:0)
为什么不使用Select-XML?我没有完整的xml文档样本,但这可能符合您的需求。
$xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Switches>
<NetworkSwitch Location="ABC" Address="XX.XXX.XXX.XX" Vlan="YY" />
<NetworkSwitch Location="DEF" Address="XX.XXX.XXX.XX" Vlan="ZZ" />
<NetworkSwitch Location="GHI" Address="XX.XXX.XXX.XX" Vlan="XX" />
</Switches>
"@
Select-Xml -Content $xml -XPath "//NetworkSwitch" | Select-Object -ExpandProperty Node
返回以下内容:
Location Address Vlan
-------- ------- ----
ABC XX.XXX.XXX.XX YY
DEF XX.XXX.XXX.XX ZZ
GHI XX.XXX.XXX.XX XX
这些是您可以随意存储和操作的System.Xml.XmlElement对象。您还可以进一步优化XPath语句以仅检索必要的属性。例如,如果您只想将VLAN信息更改为:
,请使用上面的xmlSelect-Xml -Content $xml -XPath "//NetworkSwitch/@Vlan" | Select-Object -ExpandProperty Node
#text
-----
YY
ZZ
XX
答案 1 :(得分:0)
首先无需确定机架数量。只需在SelectNodes()
上使用适当的XPath表达式调用$xml
,然后在输出中选择所需的属性:
$xml.SelectNodes('//Rack/NetworkSwitch') |
Select-Object -Unique Location, Address, Vlan
如果您希望CSV格式的输出在Excel中导入,请将上述语句输入Export-Csv
:
... | Export-Csv 'C:\path\to\output.csv' -NoType