我有一个备份报告的CSV文件,其中有多列。我只想获取那些使用特定存储集从未成功的客户。
样本输入文件为
Client Name,Save Set Name,Group,Status
a,All,Group1,Failed
a,SQL,Group2,succeeded
b,SQL,Group1,Failed
c,FS,Group1,Failed
d,DBA,Group1,Failed
e,RDM,Group1,Failed
a,ALL,Group2,succeeded
b,SQL,Group3,succeeded
c,SQL,Group4, Failed
输出
Client Name Save Set Name Status Group
a All Failed Group1
b SQL Failed Group1
c FS Failed Group1
d DBA Failed Group1
e RDM Failed Group1
c SQL Failed Group4
预期输出
Client Name,Save Set Name,Group,Status
c,FS,Group1,Failed
d,DBA,Group1,Failed
e,RDM,Group1,Failed
c,SQL,Group4, Failed
在下面的命令中,我面临的问题是,我要让失败的客户端在其他组中获得成功。而我只希望那些具有存储集的客户端失败并且没有任何成功价值。状态。
Get-Content E:\Report\Daily_Failed.csv |
ConvertFrom-Csv |
Select-Object -Unique * |
Group-Object -Property 'Client Name', 'Save Set Name', 'Group' |
Where-Object { 0 -eq ($_.Group | Where-Object Status -eq 'succeeded').Count } |
Select-Object -Expand Group |
Select-Object "Client Name", "Save Set Name", "status", "Group" |
Export-Csv -NoTypeInformation E:\Report\Failed_$CurrentDate.csv
您可以使用Group-Object
和Where-Object
子句来完成此操作。
对于演示,我使用的是Here-String;在现实生活中,您可以使用
从文件中导入csv$csv = Import-Csv -Path 'X:\yourInputFile.csv'
代码:
$csv = @"
Client Name,Save Set Name,Group,Status
a,All,Group1,Failed
a,SQL,Group2,succeeded
b,SQL,Group1,Failed
c,FS,Group1,Failed
d,DBA,Group1,Failed
e,RDM,Group1,Failed
a,ALL,Group2,succeeded
b,SQL,Group3,succeeded
c,SQL,Group4, Failed
"@ | ConvertFrom-Csv
$result = $csv | Group-Object 'Client Name' | ForEach-Object {
$succeeded = $_.Group | Where-Object { $_.Status -eq 'succeeded' }
if (!$succeeded) { $_.Group } # never succeeded, so output these
}
# output on screen
$result | Format-Table -AutoSize
# output to CSV
$result | Export-Csv -Path 'X:\yourFilteredCsv.csv' -UseCulture -NoTypeInformation
结果:
客户端名称存储集名称组状态----------- ------------- ----- ------c FS组1失败c SQL Group4失败d DBA组1失败e RDM组1失败