powershell - 根据服务器名组合 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}
}
解决方案
使用 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
推荐阅读
- c - 为什么我不能在 scanf 之前定义 float (在这种情况下)?
- python - 用另一本字典排序字典
- pine-script - 如何获得特定日期的收盘价
- canvas - 在 Threejs 中,RenderTarget 到画布 Y 轴被翻转
- git - 如何在 Artifactory 工件中引用记录 Git 提交 URL
- php - 通过 PHP 远程连接 MySQL
- java - 堆中有很多带有finalize()的对象,即PgConnection
- javascript - 是否可以隐藏 react-chart-js2 中图表上显示的悬停值
- java - 如何在 Android 中将多个选定的图像从图库转换为 PDF?
- java - Spring Saml2 SP 与 Angular 应用程序的集成(我已经在后端实现了 Saml2 安全性,现在我想从 Angular 应用程序连接到后端)