【发布时间】:2021-09-20 19:36:01
【问题描述】:
我有一个用于备份报告的 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
在我下面的命令中,我面临的问题是我正在以 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
示例 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
期望的输出
gsiecwt2020.web.local,pseudo_saveset,D_CWT_File_System_1,failed
它应该匹配Client Name、Save Set Name 和Status。
如果具有相同Save Set Name的客户端在任何其他组中成功,则应将其标记为成功,但如果具有特定Save Set Name的客户端失败,则应将其标记为Failed。
【问题讨论】:
-
这能回答你的问题吗? Filter output (where-object) from variable
标签: powershell grouping