我创建了一个 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
值是唯一的