Проблема с скриптом Powershell, который не фильтруется по дате

Я собрал эту функцию PowerShell, чтобы в основном извлекать события из журнала NPS (в частности, запрещенные попытки аутентификации) с последней точки, в которой был запущен скрипт (переменная $ date), сортировать IP и датировать запись журнала, добавить его в массив ($ array) и экспортировать в журнал CSV.

Затем я использую тот же массив ($ array) для сортировки журналов за последний час, проверяю, 10 или больше, и переместите все, что соответствует этим критериям, в новый массив ($ getip). (Вроде как установка fail2ban, но для Windows)

Все работает, за исключением того, что в конце функции есть строка, в которой я использую сортировку и подсчет записей, я считаю хорошо, но на самом деле не удаляет записи, которые после 1 часа.

Может ли кто-нибудь увидеть то, что мне не хватает? Я благодарен за любую помощь.

function Get-DeniedIP {
$denied = 'C:\bin\denied.csv' #CSV log of IP's that have been linked to denied auth attempts
$whitelist = Import-Csv 'C:\bin\whitelist.csv' #Location of whitelist csv
$datepath = 'C:\bin\cache' #If it does not exist that is fine
$bannedip = 'C:\bin\banned.csv' #CSV log of IP's that have reached the max failed auth and are banned
$check = [System.IO.File]::Exists($datepath)
if ($check -like '*False*') {
    (get-date).ToString() | Out-File $datepath
    $date = Get-Date
}
else {
    $date = Get-Content $datepath
    $date = Get-Date -Date $date
}
$log = Get-EventLog -LogName Security -Message "*Network Policy Server denied*" -After $date
$array = @()
foreach ($message in $log) {
    $address = ($message.message |  Select-String -Pattern "Calling Station Identifier:\s*\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value
    $address = ($address |  Select-String -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value
    $object = New-Object -TypeName PSObject
    $object | Add-Member -Name 'IP' -MemberType Noteproperty -Value $address
    $object | Add-Member -Name 'Date' -MemberType NoteProperty -Value $message.TimeWritten
    $array += $object
}
$final = $array | where {$whitelist.IP -notcontains $_.IP}
if ($final -eq $null) {}
else {$final | Export-Csv $denied -Append}
$final

$DT = [DateTime]::Now.AddHours(-1)
$getip = $array | group-object -property IP  | where {$_.Count -gt 10 -and 

$array.Date -ge $DT} | Select -Property Name | Export-Csv $bannedip -Append

}
2
задан 4 December 2019 в 07:23
1 ответ

$DT = [DateTime]::Now.AddHours(-1) содержит полную дату и время, я предложил бы удалить все кроме времени, поскольку это может препятствовать тому, чтобы сценарий соответствовал журналам на основе времени.

1
ответ дан 31 December 2019 в 11:52

Теги

Похожие вопросы