我有一个备份报告,其中有多列。我只想吸引那些在特定小组中从未获得成功的客户。如果具有相同存储集的相同客户端在其他组中成功,那么对于该失败的特定组,我也应该将该客户端视为失败。
Get-Content E:\Report\Daily_Failed.csv |
ConvertFrom-Csv |
Select-Object -Unique * |
Group-Object -Property 'Client Name','Save Set Name','Group' |
Where-Object { $_.Count -eq 1 -and $_.Group.Status -eq 'Failed' } |
Select-Object -Expand Group |
Select-Object "Client Name", "Save Set Name", "status", "Group" |
Export-Csv -NoTypeInformation E:\Report\Final_Failed.csv
输入
Client Name,Save Set Name,Group,Status
SQL01.abc.com,MSSQL, D_CWT_SQL_FULL,Failed
SQL01.abc.com,MSSQL:master,D_CWT_SQL_FULL, Success
SQL01.abc.com,MSSQL:model,D_CWT_SQL_FULL,Failed
SQL01.abc.com,MSSQL:msdb,D_CWT_SQL_FULL,Failed
SQL01.abc.com,MSSQL,SQL_T-Log_15Mins,Success
SQL01.abc.com,MSSQL:master,SQL_T-Log_15Mins,Failed
SQL01.abc.com,MSSQL:model,SQL_T-Log_15Mins,Success
SQL01.abc.com,MSSQL:msdb,SQL_T-Log_15Mins,Success
5001.abc.com,G:\System,CWT_FS,Failed
5001.abc.com,G:\System,CWT_FS,Success
5001.abc.com,H:\System,CWT_FS,Failed
所需的输出
Client Name Save Set Name Group Status
SQL01.abc.com MSSQL D_CWT_SQL_FULL Failed
SQL01.abc.com MSSQL:model D_CWT_SQL_FULL Failed
SQL01.abc.com MSSQL:msdb D_CWT_SQL_FULL Failed
SQL01.abc.com MSSQL:masterSQL_T-Log_15Mins Failed
5001.abc.com H:\System CWT_FS Failed
我想为所有失败的客户端输出到特定组。 我尝试用状态和存储集过滤掉该列,但是在那种情况下,我没有得到一组失败而在其他组成功的客户端。
答案 0 :(得分:1)
您的逻辑是错误的,如果每组Status = Success的总和为零,则要保留它。
Get-Content .\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 'Success').Count} |
Select-Object -Expand Group |
Select-Object "Client Name", "Save Set Name", "status", "Group"
没有出口就产生:
Client Name Save Set Name Status Group
----------- ------------- ------ -----
SQL01.abc.com MSSQL Failed D_CWT_SQL_FULL
SQL01.abc.com MSSQL:model Failed D_CWT_SQL_FULL
SQL01.abc.com MSSQL:msdb Failed D_CWT_SQL_FULL
SQL01.abc.com MSSQL:master Failed SQL_T-Log_15Mins
5001.abc.com H:\System Failed CWT_FS