Я пытаюсь проанализировать группу текстовых файлов (журналы MSFTP) и делать подсчеты IP-адресов, которые отправили плохие учетные данные. Я думаю, что это сработало, за исключением того, что я не думаю, что массив правильно переходит в/из функции. В результате я получаю дубликаты записей, если один и тот же IP-адрес появляется в нескольких файлах журнала. Что я делаю не так?Объединение подобных объектов в массив
Function LogBadAttempt($FTPLog,$BadPassesArray)
{
$BadPassEx="PASS - 530"
Foreach($Line in $FTPLog)
{
if ($Line -match $BadPassEx)
{
$IP=($Line.Split(' '))[1]
if($BadPassesArray.IP -contains $IP)
{
$CurrentIP=$BadPassesArray | Where-Object {$_.IP -like $IP}
[int]$CurrentCount=$CurrentIP.Count
$CurrentCount++
$CurrentIP.Count=$CurrentCount
}else{
[email protected]{"IP"=$IP;"Count"='1'}
$BadPass=New-Object -TypeName PSObject -Property $info
$BadPassesArray += $BadPass
}
}
}
return $BadPassesArray
}
[email protected]()
$FTPLogs = Get-Childitem \\ftpserver\MSFTPSVC1\test
$Result = ForEach ($LogFile in $FTPLogs)
{
$FTPLog=Get-Content ($LogFile.fullname)
LogBadAttempt $FTPLog
}
$Result | Export-csv C:\Temp\test.csv -NoTypeInformation
Результат выглядит ...
Count IP
7 209.59.17.20
20 209.240.83.135
18441 209.59.17.20
13059 200.29.3.98
и хотели бы, чтобы объединить записи для 209.59.17.20
У вас есть ключ, IP-адрес. Вы могли бы найти этот ключ до добавления нового объекта в ваш массив. Если вы его найдете, верните счет, увеличьте его с новым значением и отпустите в следующий раунд. –
Это то, что я пытался с помощью if ($ BadPassesArray.IP -contains $ IP). Он отлично работает, когда я работаю над одним и тем же файлом журнала. Когда он переходит к следующему файлу журнала, он как будто создает новую версию массива для этого цикла, так как не видит объект с тем же значением IP, чтобы он начинал новый. –