2016-11-15 12 views
0

このスクリプトでは、XMLのデータ、具体的にはマシンの名前、次にそれぞれのID番号のリストを取得します。私はそれぞれを変数にすることができますが、IDのすべてをリストすると、それぞれの最初の要素だけが表示されます。私はExport-CSV -Appendがこれを解決できたと思っていましたが、これまでのところ何もありませんでした。Export-CSVは最初の要素を返すだけです

$path="C:\Users\Desktop\DataIDs" 
$xmls = Get-ChildItem $path\* -Recurse | where {$_.Name -like '*DataIDX*'} 

$results = New-Object psobject 

ForEach ($xml in $xmls) { 
    [xml]$results = Get-Content $xml 
    $Name = $results.Benchmark.TestResult.target 
    $VID1 = @($results.Benchmark.TestResult.'rule-result' | where {$_.result -eq 'fail'}).Version | Sort-Object 
    $VID = $VID1 | Out-String 

    ForEach ($id in $VID) { 
     $results | Add-Member -MemberType NoteProperty -Name $Name -Value $id 
     } 
} 

$results | Export-Csv $path\results.csv -NoTypeInformation -Append 
Remove-Variable results 

答えて

0

さて、あなたはメンバーがすべてをあきらめ追加方法:

Add-Member -MemberType NoteProperty -Name $Name -Value $id 

あなたはいつも同じメンバーを追加しています。だから、他の追加は "メンバーは既にそこにあり、そのプロパティに書き込むことはできません"というようなものを投げています。

ps。私の悪い、私は元の質問を正しく読まなかった。私はそれを正しく説明する答えを編集しました。

0

あなたはそれを毎回上書きされ、すべての$resultsオブジェクトを格納する配列を使用する必要があります...

EDIT:また、私が見るもう一つの問題は、あなたの$VIDができませんので、Stringオブジェクトであるということですqに対して

$path="C:\Users\Desktop\DataIDs" 
$xmls = Get-ChildItem $path\* -Recurse | where {$_.Name -like '*DataIDX*'} 

$resultsArray = @() 
ForEach ($xml in $xmls) { 
    [xml]$results = Get-Content $xml 
    $Name = $results.Benchmark.TestResult.target 
    $VID1 = @($results.Benchmark.TestResult.'rule-result' | where {$_.result -eq 'fail'}).Version | Sort-Object 
    $VID = $VID1 

    ForEach ($id in $VID) { 
     $results | Add-Member -MemberType NoteProperty -Name $Name -Value $id 
     } 
$resultsArray += $results 
} 

$resultsArray | Export-Csv $path\results.csv -NoTypeInformation -Append 
Remove-Variable results 
+0

おかげでこれを試してみてくださいOut-Stringを削除し、再び

を試してみてください、あなたは私はあなたが必要なものではないと考えている文字...を取得します、文字列オブジェクトを反復あなたはヌル値式でメソッドを呼び出すことはできませんが、あなたの言うことは正しく聞こえます – dblfaultventura

+0

私の答えを編集しました – Avshalom

関連する問題