powershell - Powershell:创建一个自动添加键并计算值的哈希表
问题描述
首先,因为这是我在这里的第一个问题,我希望我不要搞砸了。这是我第一次使用 Powershell,所以我很迷茫。
我得到了一个看起来与此类似的日志文件。
30.11.2020 05:05:39 SMTP Server: (Servername) (255.255.255.255) disconnected. 1 message[s] received
30.11.2020 05:05:39 SMTP Server: (Servername) (255.255.254.254) disconnected. 2 message[s] received
30.11.2020 05:05:39 SMTP Server: (Servername) (255.255.255.255) disconnected. 4 message[s] received
30.11.2020 05:05:39 SMTP Server: (Servername) (255.255.234.245) disconnected. 4 message[s] received
30.11.2020 05:05:40 SMTP Server: (Servername) (255.255.253.244) disconnected. 1 message[s] received
30.11.2020 05:05:41 SMTP Server: (Servername) (255.255.255.255) disconnected. 46 message[s] received
30.11.2020 05:05:41 SMTP Server: (Servername) (255.255.234.245) disconnected. 13 message[s] received
所以我的目标是,创建$SMTP
自动将密钥设置为 IP 的 hastable(日志文件中有几个不同的),然后计算收到的每条消息的值。
我想我现在了解了哈希表的基本知识以及如何手动设置每个键和值,但我确信必须有一种方法可以自动执行此操作。
在这一点上,我不知道如何继续,我将不胜感激。
真诚的
解决方案
我将使用-match
正则表达式比较运算符从每一行捕获 IP 地址和消息计数:
# Create hashtable
$SMTP = @{}
# Iterate over log lines
Get-Content path\to\file.log |ForEach-Object {
if($_ -match '\(((?:\d{1,3}\.){3}\d{1,3})\) disconnected. (\d+) message\[s\]'){
# extract captured substrings
$IP = $matches[1]
$msgCount = $matches[2] -as [int]
# update hashtable
$SMTP[$IP] += $msgCount
}
}
推荐阅读
- php - 在浏览器上显示保存在 gridfs 中的 pdf 文件的预览
- php - PHPJasper - SubReports - 填写reportResource时出错,在以下位置找不到:
- excel - 具有不同匹配类型的多个条件的 Excel 索引匹配
- react-native - 在 React Native 中按下时从按钮列表中获取键
- javascript - 将 MongoDB 中的字符串保存为日期会保存错误的值
- r - 如何检查数据框行的一个元素中的字符串是否在另一个元素中
- dropbox-api - 无法使用 Dropbox Business 团队令牌删除文件
- python - Python recursive function wont change list defined in main()
- ios - iOS 通过单击 TableView 中的另一个部分来折叠/展开部分
- regex - Python 3 Pandas 通过正则表达式和通配符过滤数据框