Export-CSV仅返回第一个元素

时间:2016-11-15 13:25:55

标签: xml powershell foreach formatting export-to-csv

所以我有这个脚本从xml获取数据,特别是机器的名称,然后是每个的id号列表。我能够将每个变量都变成变量,但是当我尝试列出所有id时,只显示每个变量的第一个元素。我认为Export-CSV -Append可以解决这个问题,但到目前为止还没有解决。

$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

2 个答案:

答案 0 :(得分:0)

好吧,你追加会员的方式可以全力以赴:

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

您总是追加相同的成员。所以其他追加者正在抛弃“会员已经在那里,不能写入该财产”或类似的东西。

PS。我的不好,我没有正确地阅读原始问题。我已经编辑了答案来正确解释它。

答案 1 :(得分:0)

你需要使用一个数组来存储所有$results个对象,你每次都要覆盖它......

编辑:我看到的另一个问题是你的$VID是一个字符串对象,你不能迭代一个字符串对象,你会得到字符......我相信这不是什么您需要,删除Out-String然后重试

试试这个:

$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