首页 > 解决方案 > 根据服务器名组合 2 个数组的值

问题描述

以下是我从查询中获得的 2 个表

表格1

Servername              Type max avg
lnx0401.ch3.prod.i.com  AS  100 40
lnx0402.ch3.prod.i.com  AS  99  30
lnx0576.ch3.prod.i.com  AS  34  3
lnx0577.ch3.prod.i.com  AS  94  8
lnx0578.ch3.prod.i.com  AS  99  21

表-2

Servername              Type Count
lnx0401.ch3.prod.i.com  AS  86
lnx0402.ch3.prod.i.com  AS  42

输出应该像

Servername             Type max avg count
lnx0401.ch3.prod.i.com  AS  100 40 86
lnx0402.ch3.prod.i.com  AS  99  30 42
lnx0576.ch3.prod.i.com  AS  34  3  0
lnx0577.ch3.prod.i.com  AS  94  8  0
lnx0578.ch3.prod.i.com  AS  99  21 0

必须将表 -2 的数据与表 -1 匹配,如果服务器出现在表 -1 中,则需要从表 -2 中选择计数并创建最终表,否则会将 0 与计数相匹配。

请让我知道如何做到这一点

试过但很困惑

$hashB=@{}
foreach($records in $data_2)
{
    $hashB[$records.servername] = $records
}

$data_1 | foreach{
    
    $record = $_
    $other = $hashB[$record.servername]

    [pscustomobject]@{ServerName=$_.servername
                 RoleType=$_.RoleType
                 CPUMax = $_.cpumax
                 CPUAvg = $_.cpuavg
                 PeakCount = $other.peakcount}
}

标签: powershell

解决方案


使用 join-object 模块,它将允许合并 2 个数组而没有任何循环。在示例中,我使用来自导入的 csv,您不必只使用数组。例子

安装模块连接对象

$test = Import-Csv C:\Temp\test1.csv
$test2 = Import-Csv C:\Temp\test2.csv

Join-Object -Left $test -LeftJoinProperty 服务器名 -Right $test2 -RightJoinProperty 服务器名 -RightProperties 计数

https://www.powershellgallery.com/packages/Join-Object/2.0.1


推荐阅读