Добрый день!
У меня стоит интерес вывести все логи с определённого удалённого ПК по определённому пользователю за два дня
Скрипт примерно выглядит вот так
#Берем логи за два дня
$starttime = (get-date).adddays(-2)
#Определение имени ПК
$HostS = "172.30.6.33"
#Определение пользователя
$UserN = "[Учетная запись]"
$NamePC = (Get-ADComputer -Filter {IPv4Address -eq $HostS}).Name
#Вывод логов за два дня по входу/выходу
$Events=Get-EventLog -ComputerName $NamePC -After $starttime -LogName Security | Where-Object { ($_.Message -match $UserN) -and (
($_.InstanceID -eq 4800)-or
($_.InstanceID -eq 4801) -or
($_.InstanceID -eq 1024) -or
($_.InstanceID -eq 4624 -and (
($_.Message -match 'Тип входа: 2') -or ($_.Message -match 'Тип входа: 7')-or ($_.Message -match 'Тип входа: 10')
)
)
)
}
#Определение формата вывода
$Data = New-Object System.Management.Automation.PSObject
$Data| Add-Member NoteProperty Time($null)
$Data| Add-Member NoteProperty UserName($null)
$Data| Add-Member NoteProperty IPAddress($null)
$Data| Add-Member NoteProperty Msg($null)
$Events | %{
$Data.time=$_.TimeGenerated
$message = $_.Message.Split("`n")|%{$_.TrimStart()}|%{$_.TrimEnd()}
$Data.UserName = ($message|?{$_ -like "Имя учетной записи:*" -and $_-notlike "*$"})|%{$_ -replace"^.+:.+\s"}
$Data.IPAddress = ($message|?{$_ -like "Сетевой адрес источника:*"})|%{$_ -replace"^.+:."}
$Data.Msg = ($message|Select-Object -First 1)
$Data | Sort-Object Time |ft -Property UserName,IPAddress, Msg -GroupBy Time -AutoSize
}
Но в текущем виде данный скрипт ОООЧЕНЬ сильно забивает сам журнал с логами (за три запуска 80 МБайт :) ) и выполняется минут 5-10
Есть ли какие-то способы решения данной проблемы?
Например через другой командлет, или можно как то подправить/оптимизировать текущий?