所以我有这个脚本从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
答案 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