0
我正在嘗試分析一組文本文件(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地址。在將新對象添加到陣列之前,您可以查找該鍵。如果找到它,檢索計數,用新值增加它,然後轉到下一輪。 – 2014-12-03 19:37:18
這就是我試圖用if($ BadPassesArray.IP-contain $ IP)部分。當我在處理同一個日誌文件時,它工作正常。當它進入下一個日誌文件時,就像它爲該循環創建了一個新版本的數組,因爲它沒有看到具有相同IP值的對象,因此它啓動了一個新的版本。 – 2014-12-03 20:15:16