Powershell - 将两个 CSV 与 1 个 CSV 动态合并

Powershell - 将两个 CSV 与 1 个 CSV 动态合并

我创建了一个 Powershell 脚本,根据通过运行 Python 脚本检查上行链路状态发现的网络状态发送警报。Python 脚本创建一个 CSV,我的 Powershell 脚本选择特定的行并将其与引用指定代理的单独 CSV 合并。

我需要指导如何向脚本中添加内容以智能地选择分配给网络的代理,例如将代理 1 分配给网络 1,依此类推,就像以前一样,它会逐行遍历两个 CSV,如果网络发生任何变化,原始 CSV 会更改与代理 CSV 不同的网络行。例如,将代理 1 分配给网络 3。

我使用以下代码行来生成和合并 CSV

0..($csv1.Count-1) |
Select @{n='Network';e={$csv1[$_].Network}},@{n='WAN1 Status';e={$csv1[$_].'WAN1 Status'}},@{n='WAN2 Status';e={$csv1[$_].'WAN2 Status'}},@{n='Agent';e={$csv2[$_].Agent}} |
    Export-Csv 'C:\Stuff\Scripts\Health Checks\csv3.csv' -NoType

我相信可能有更好的方法来做到这一点,但我遇到了很多障碍。

CSV 输入文件 1

Network,Device,Serial,MAC,Model,WAN1 Status,WAN2 Status
053 - Network 1,053-Network1-FW01,XXXX-XXXX-XXXX,00:00:00:00:00:00,MX64,Active,Not connected
067 - Network 2,067-Network2-FW01,XXXX-XXXX-XXXX,00:00:00:00:00:00,MX64,Active,Ready
075 - Network 3,075-Network3-FW01,XXXX-XXXX-XXXX,00:00:00:00:00:00,MX64,Active,Not connected

CSV 输入文件 2

Network,Agent
053 - Network 1,Agent1
067 - Network 2,Agent2
075 - Network 3,Agent3

我目前遇到以下问题。

Network,WAN1 Status,WAN2 Status,Agent
053 - Network 1,Active,Not connected,Agent 1
075 - Network 3,Active,Ready,Agent 2
067 - Network 2,Active,Not connected,Agent 3

请注意,网络 3 现在已分配给代理 2,这是不希望的。

所需 CSV

Network,WAN1 Status,WAN2 Status,Agent
053 - Network 1,Active,Not connected,Agent 1
075 - Network 3,Active,Ready,Agent3
067 - Network 2,Active,Not connected,Agent 2

我对任何事情都持开放态度,有人可以建议更好的方法来做到这一点吗?

答案1

快速解决方法是在 csv2 中查找代理值,而不是对两个文件使用相同的行号。我不知道 csv2 有多大,但查找会更慢。

Foreach ($i in 0..($csv1.Count-1)){
    Select @{n='Network';e={$csv1[$i].Network}},
        @{n='WAN1 Status';e={$csv1[$i].'WAN1 Status'}},
        @{n='WAN2 Status';e={$csv1[$i].'WAN2 Status'}},
        @{n='Agent';e={($csv2| where {$_.Network -like $csv1[$i].Network}).Agent}} |
    
    Export-Csv 'C:\Stuff\Scripts\Health Checks\csv3.csv' -NoType
}

假设csv2.Network值是唯一的

相关内容