2016-11-16 9 views
0

PowerShellを使用してXMLデータを解析し、XLS形式にエクスポートするスクリプトがあります。このスクリプトは、XMLが複雑でない場合に機能します。ただし、ノードに複数のプロパティがある場合は、そのプロパティはありません。現在Parse 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

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文をさらに絞り込むこともできます。たとえば、上記のxmlを使用してVLAN情報を変更したい場合は、

Select-Xml -Content $xml -XPath "//NetworkSwitch/@Vlan" | Select-Object -ExpandProperty Node 

#text 
----- 
YY 
ZZ 
XX 
0

最初にラックの数を決定する必要はありません。ただ、$xml上の適切なXPath式でSelectNodes()を呼び出し、あなたが出力に必要な属性を選択します。

$xml.SelectNodes('//Rack/NetworkSwitch') | 
    Select-Object -Unique Location, Address, Vlan 

あなたはExcelのパイプでインポート用CSV形式で出力Export-Csvに上記のステートメントをしたい場合:

... | Export-Csv 'C:\path\to\output.csv' -NoType