Вы можете сделать это с помощью предложений 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
Результат:
Client Name Save Set Name Group Status
----------- ------------- ----- ------
c FS Group1 Failed
c SQL Group4 Failed
d DBA Group1 Failed
e RDM Group1 Failed
Просмотр ваших последних комментариев, Я думаю / надеюсь, что теперь я понимаю вопрос лучше. К счастью, код можно легко настроить для группировки не только по «имени клиента», но и по «имени сохраненного набора», как показано ниже.
$result = $csv | Group-Object 'Client Name','Save Set Name' | ForEach-Object {
# if any of the group items have a status of 'succeeded', skip that group
$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
Используя пример 1:
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 Group Status
----------- ------------- ----- ------
c FS Group1 Failed
d DBA Group1 Failed
e RDM Group1 Failed
c SQL Group4 Failed
Используя пример 2:
Client Name,Save Set Name,Group,Status
gsiecwt2020.web.local,pseudo_saveset,D_CWT_File_System_1,failed
gsiecwt2020.web.local,J:\System,D_CWT_File_System_2,succeeded
gsiecwt2020.web.local,K:\System,D_CWT_File_System_1,succeeded
gsiecwt2020.web.local,K:\System,D_CWT_File_System_3,failed
выход:
Client Name Save Set Name Group Status
----------- ------------- ----- ------
gsiecwt2020.web.local pseudo_saveset D_CWT_File_System_1 failed