2016-09-23 5 views
0

私は、各行でキャプチャしようとしている2つの異なる値を含むxmlファイルを持っています。私はPowershellを使用して、CSV、2つの列、1つはデバイスID、もう1つはMACアドレス、見出しは解析しようとしています。どんな提案も大歓迎です。以下は、XMLファイルがどのように見えるかのサンプルです。あなたの時間をありがとう。powershell xmlの値をCSVにパーズします

<?xml version="1.0" encoding="utf-8"?> 
<DeviceConfig> 
    <Device RegisterID="1021" MacID="A4F1E85D7D86" /> 
    <Device RegisterID="1022" MacID="A4F1E85D056E" /> 
    <Device RegisterID="1023" MacID="A4F1E85CAAEE" /> 
    <Device RegisterID="1024" MacID="A4F1E85DB284" /> 
    <Device RegisterID="1025" MacID="A4F1E85D7021" /> 
    <Device RegisterID="1026" MacID="A4F1E85D034A" /> 
    <Device RegisterID="1027" MacID="A4F1E85CAD59" /> 
    <Device RegisterID="1028" MacID="A4F1E85DAFA2" /> 
    <Device RegisterID="1029" MacID="A4F1E85D050E" /> 
    <Device RegisterID="1030" MacID="A4F1E85DAF89" /> 
    <Device RegisterID="1031" MacID="A4F1E85DA80E" /> 
</DeviceConfig> 

答えて

3

私のここの文字列を実際のファイルのGet-Content呼び出しで置き換えることはできますが、これは私にとってはうまく動作し、.NETクラスを呼び出す必要はありません。

この情報を

コード

$xml = @" 
<?xml version="1.0" encoding="utf-8"?> 
<DeviceConfig> 
    <Device RegisterID="1021" MacID="A4F1E85D7D86" /> 
    <Device RegisterID="1022" MacID="A4F1E85D056E" /> 
    <Device RegisterID="1023" MacID="A4F1E85CAAEE" /> 
    <Device RegisterID="1024" MacID="A4F1E85DB284" /> 
    <Device RegisterID="1025" MacID="A4F1E85D7021" /> 
    <Device RegisterID="1026" MacID="A4F1E85D034A" /> 
    <Device RegisterID="1027" MacID="A4F1E85CAD59" /> 
    <Device RegisterID="1028" MacID="A4F1E85DAFA2" /> 
    <Device RegisterID="1029" MacID="A4F1E85D050E" /> 
    <Device RegisterID="1030" MacID="A4F1E85DAF89" /> 
    <Device RegisterID="1031" MacID="A4F1E85DA80E" /> 
</DeviceConfig> 
"@ 

$xmlData = [xml]$xml 

$xmlData.DeviceConfig.ChildNodes | ConvertTo-Csv -NoTypeInformation 

出力

"RegisterID","MacID" 
"1021","A4F1E85D7D86" 
"1022","A4F1E85D056E" 
"1023","A4F1E85CAAEE" 
"1024","A4F1E85DB284" 
"1025","A4F1E85D7021" 
"1026","A4F1E85D034A" 
"1027","A4F1E85CAD59" 
"1028","A4F1E85DAFA2" 
"1029","A4F1E85D050E" 
"1030","A4F1E85DAF89" 
"1031","A4F1E85DA80E" 

、あなたが進歩を遂げることができるはず...

+0

私はこのアプローチも好きです。 –

+0

これは完璧に機能しました - 援助に感謝します! ConvertTo-csvではなくExport-csvを使用して、私が望むように.csvファイルにエクスポートできました。乾杯! – LilithGoddess

+0

.csvファイルの各行の先頭に追加したい情報が1つ追加されています。私は大きなスクリプトで$ servernameの変数を持っています。この.csvに "Server Name"の列を入れ、各行(RegisterIDとMacIDの前)に$ servernameの値を追加します。どのようにこれに最善のアプローチに任意のアイデアですか?ありがとうございました! – LilithGoddess

-1

純粋なPSはここでは使用しないでください。純粋なPSは役に立ちません。幸いにも、それは簡単です。

Add-Type -AssemblyName System.Xml.Linq 
$xe = [System.Xml.Linq.XElement]::Parse($xml) 
$xe.Elements() | % {$_.Attribute('RegisterID').Value + ", " + $_.Attribute('MacID').Value} 

出力する内容を印刷します。ファイルへの保存は、他の多くの回答でカバーされています。

+0

私は実際にそれをする必要がないことがわかりました.Netクラスを使用します。ご協力ありがとうございました! – LilithGoddess

2

私はこれがうまくいくと思います。ここで私はあなたがファイルからインポートすることができる、文字列からXMLを読んでいます:

$xml = @" 
<?xml version="1.0" encoding="utf-8"?> 
<DeviceConfig> 
    <Device RegisterID="1021" MacID="A4F1E85D7D86" /> 
    <Device RegisterID="1022" MacID="A4F1E85D056E" /> 
    <Device RegisterID="1023" MacID="A4F1E85CAAEE" /> 
    <Device RegisterID="1024" MacID="A4F1E85DB284" /> 
    <Device RegisterID="1025" MacID="A4F1E85D7021" /> 
    <Device RegisterID="1026" MacID="A4F1E85D034A" /> 
    <Device RegisterID="1027" MacID="A4F1E85CAD59" /> 
    <Device RegisterID="1028" MacID="A4F1E85DAFA2" /> 
    <Device RegisterID="1029" MacID="A4F1E85D050E" /> 
    <Device RegisterID="1030" MacID="A4F1E85DAF89" /> 
    <Device RegisterID="1031" MacID="A4F1E85DA80E" /> 
</DeviceConfig> 
"@ 

$csv = ` 
    Select-Xml -Content $xml -XPath "//Device" ` 
    | Select -ExpandProperty Node ` 
    | ConvertTo-Csv -NoTypeInformation 

$csv 

これは$csvの内容です:

"RegisterID","MacID" 
"1021","A4F1E85D7D86" 
"1022","A4F1E85D056E" 
"1023","A4F1E85CAAEE" 
"1024","A4F1E85DB284" 
"1025","A4F1E85D7021" 
"1026","A4F1E85D034A" 
"1027","A4F1E85CAD59" 
"1028","A4F1E85DAFA2" 
"1029","A4F1E85D050E" 
"1030","A4F1E85DAF89" 
"1031","A4F1E85DA80E" 

あなたが外にそれを書くことができるはずですあなたが必要ならばファイル。

+0

これは良いアプローチです。 xmlが単純でクエリをビルドする必要がない場合、私は '[xml]'型変換が好きです。 –

関連する問題