Powershell:创建一个自动添加键并计算值的哈希表
Powershell: Create a Hashtable that automatically add keys and count up on the Value
首先,因为这是我在这里的第一个问题,所以我希望我不要搞砸了。这是我第一次使用 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
所以我的目标是,创建 hastable $SMTP
自动将密钥设置为 IP(日志文件中有几个不同的 IP),然后计算收到的每条消息的值。
我想我现在了解了哈希表的基础知识以及如何手动设置每个键和值,但我确信必须有一种方法可以自动执行此操作。
此时我将不胜感激,我不知道如何继续。
真诚的特里平
我会使用 -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
}
}
首先,因为这是我在这里的第一个问题,所以我希望我不要搞砸了。这是我第一次使用 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
所以我的目标是,创建 hastable $SMTP
自动将密钥设置为 IP(日志文件中有几个不同的 IP),然后计算收到的每条消息的值。
我想我现在了解了哈希表的基础知识以及如何手动设置每个键和值,但我确信必须有一种方法可以自动执行此操作。
此时我将不胜感激,我不知道如何继续。
真诚的特里平
我会使用 -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
}
}