使用PowerShell将两个不同的CSV文件加入对象

第一个.csv文件是基于客户端名称的每月备份大小,以KB为单位。第二个.csv文件是基于客户端名称的下一个每月备份大小(以KB为单位)。

它在A列中列出了所有客户端名称。B列具有相应的客户端策略名称,最后一列备份大小以KB为单位(即-487402463)。

如果客户端大小之间的差异(1638838488-1238838488 = 0.37 in TB)大于0.10 TB,则结果将以TB大小吐出到csv文件中,如下所示。

此外,客户端可能与多个策略名称相关。

我的问题是:我也想添加一些东西。

  • 下个月的备份大小可能会减少,例如主机名15,Company_Policy_11。
  • 此外,hostname55,Company_Policy_XXX的策略名称也可能不同。
  • 主机名XX,Company_Policy_XXX,0和主机名XX,Company_Policy_XXX,41806794,它可以是重复的客户端和策略名称。如果这在CSV2中不存在,那么我想显示为负数(-0.14),如下所示。或者也可以存在于CSV2主机名ZZ,Company_Policy_XXX中。
  • 最后,它可能位于CSV2中,例如主机名SS,Company_Policy_XXX。 我使用了Join-Object模块。 https://github.com/ili101/Join-Object

示例CSVFile1.csv

Client Name,Policy Name,KB Size
hostname1,Company_Policy,487402463
hostname2,227850336
hostname3,Company_Policy_11,8360960
hostname4,1238838488
hostname15,3238838488
hostname1,Company_Policy_55,521423110
hostname10,28508975
hostname3,Company_Policy_66,295925
hostname5,Company_Policy_22,82001824
hostname2,Company_Policy_33,26176885
hostnameXX,Company_Policy_XXX,0
hostnameXX,141806794
hostnameYY,121806794
hostname55,41806794
hostnameZZ,0
hostnameZZ,141806794

示例CSVFile2.csv

Client Name,487402555
hostname2,227850666
hostname3,8361200
hostname4,1638838488
hostname1,621423110
hostname15,1238838488
hostname10,28908975
hostname3,295928
hostname5,92001824
hostname2,36176885
hostname22,291768854
hostname23,291768854
hostname55,Company_Policy_BBB,191806794
hostnameZZ,291806794
hostnameSS,0
hostnameSS,291806794

所需的输出:

Client Name,TB Size
hostname4,0.37
hostname22,0.27
hostname23,0.27
hostnameYY,-0.12
hostnameXX,-0.14
hostname15,-2
hostname55,0.15
hostnameZZ,0.15
hostnameSS,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
su0123456789 回答:使用PowerShell将两个不同的CSV文件加入对象

您可以这样做类似于以下内容。假设您要从CSV2值中减去CSV1值。

# Read CSV files and make CSV1 sizes negative. Makes summing totals simpler.
$1 = Import-Csv CSVFile1.csv | Foreach-Object { $_.'KB Size' = -$_.'KB Size'; $_ }
$2 = Import-Csv CSVFile2.csv

# Calculated Properties to be used with Select-Object
$CalculatedProperties = @{n='Client Name';e={$_.Group.'Client Name' | Get-Unique}},@{n='Policy Name';e={$_.Group.'Policy Name' | Get-Unique}},@{n='TB Size';e={[math]::Round(($_.Group.'KB Size' | Measure -Sum).Sum*1KB/1TB,2)}}

# Grouping objects based on unique client and policy name combinations
$1 + $2 | Group-Object 'Client Name','Policy Name' |
    Select-object $CalculatedProperties |
        Where {[math]::Abs($_.'TB Size') -gt 0.10}
本文链接:https://www.f2er.com/3099805.html

大家都在问