【发布时间】:2020-03-10 20:32:28
【问题描述】:
第一个 .csv 文件是基于客户端名称的每月备份大小(以 KB 为单位)。第二个 .csv 文件是基于客户端名称的下个月备份大小(以 KB 为单位)。
它在 A 列中列出了所有客户端名称。B 列具有客户端的相应策略名称和最后一列备份大小(以 KB 为单位)(即 - 487402463)。
如果客户端大小(1638838488 - 1238838488 = 0.37 in TB)之间的差异大于 0.10 TB,则结果将以 TB 大小输出到如下所示的 csv 文件中。
另外,一个客户端可能关联多个策略名称。
我的问题是:我也想添加一些东西。
- 备份大小可能会在下个月减少,例如 hostname15、Company_Policy_11。
- 另外,hostname55,Company_Policy_XXX 可能有不同的策略名称。
- hostnameXX,Company_Policy_XXX,0 和 hostnameXX,Company_Policy_XXX,41806794 它可能是重复的客户端和策略名称。如果这在 CSV2 中不存在,那么我想显示为负数(-0.14),如下所示。或者也可能存在于 CSV2 主机名ZZ,Company_Policy_XXX 中。
- 最后只是它可能在 CSV2 中,例如 hostnameSS、Company_Policy_XXX。 我使用了 Join-Object 模块。 https://github.com/ili101/Join-Object
CSVFile1.csv 示例
Client Name,Policy Name,KB Size
hostname1,Company_Policy,487402463
hostname2,Company_Policy,227850336
hostname3,Company_Policy_11,8360960
hostname4,Company_Policy_11,1238838488
hostname15,Company_Policy_11,3238838488
hostname1,Company_Policy_55,521423110
hostname10,Company_Policy,28508975
hostname3,Company_Policy_66,295925
hostname5,Company_Policy_22,82001824
hostname2,Company_Policy_33,26176885
hostnameXX,Company_Policy_XXX,0
hostnameXX,Company_Policy_XXX,141806794
hostnameYY,Company_Policy_XXX,121806794
hostname55,Company_Policy_XXX,41806794
hostnameZZ,Company_Policy_XXX,0
hostnameZZ,Company_Policy_XXX,141806794
CSVFile2.csv 示例
Client Name,Policy Name,KB Size
hostname1,Company_Policy,487402555
hostname2,Company_Policy,227850666
hostname3,Company_Policy_11,8361200
hostname4,Company_Policy_11,1638838488
hostname1,Company_Policy_55,621423110
hostname15,Company_Policy_11,1238838488
hostname10,Company_Policy,28908975
hostname3,Company_Policy_66,295928
hostname5,Company_Policy_22,92001824
hostname2,Company_Policy_33,36176885
hostname22,Company_Policy,291768854
hostname23,Company_Policy,291768854
hostname55,Company_Policy_BBB,191806794
hostnameZZ,Company_Policy_XXX,0
hostnameZZ,Company_Policy_XXX,291806794
hostnameSS,Company_Policy_XXX,0
hostnameSS,Company_Policy_XXX,291806794
期望的输出:
Client Name,Policy Name,TB Size
hostname4,Company_Policy_11,0.37
hostname22,Company_Policy,0.27
hostname23,Company_Policy,0.27
hostnameYY,Company_Policy_XXX,-0.12
hostnameXX,Company_Policy_XXX,-0.14
hostname15,Company_Policy_11,-2
hostname55,Company_Policy_BBB,0.15
hostnameZZ,Company_Policy_XXX,0.15
hostnameSS,Company_Policy_XXX,0.29
到目前为止,这是我的脚本:
$CSV2 | FullJoin $CSV1 `
-On 'Client Name','Policy Name' `
-Property 'Client Name',
'Policy Name',
@{'TB Size' = {[math]::Round(($Left.'KB Size' - $Right.'KB Size') * 1KB / 1TB, 2)}} |
Where-Object {[math]::Abs($_.'TB Size') -gt 0.10} | Export-Csv C:\Toolbox\DataReport.csv -NoTypeInformation
【问题讨论】:
-
您想如何处理具有不同策略的重复客户端名称?您所需的输出忽略了 hostname1 作为示例,这是我正在质疑的场景。
-
是的,一个客户端可能关联多个策略名称。实际上,它不会忽略。据我所知,如果我从 hostname1,Company_Policy_55,621423110 中减去 hostname1,Company_Policy_55,521423110 (不大于 0.10 TB),则不会返回任何内容。
-
抱歉,我无法满足您的要求:两个列表中有重复的公共键(如
hostnameZZ,Company_Policy_XXX)。当这个副本只在一侧交换时,这会带来什么问题? (知道这些列表显然不按顺序排列。但重复项是??? ...这将是一个非常奇怪的定义...),或者如果有像hostnameZZ,Company_Policy_XXX这样的重复项怎么办在一侧而不是在另一侧?我想您需要在列表中添加其他属性,例如backup date,以获得更精简的要求。
标签: powershell csv join compare export-to-csv