none
помогите изменить скрипт

    Вопрос

  • Доброго времени суток!

    поставили задачу мониторить RDP вход на сервер и подключение к нему пользователей.

    в планировщике задач создана задача запускать скрипт по событию 4624, он пишет лог и отправляет его на почту.

    скрипт

    #Определяем все переменные для отправки
    $Theme = “событие” # Первая строчка в теле письма, чтобы понимать о чем речь.
    $Subject = “тема” # Тема сообщения
    $Server = “smtp.domain.ru” # SMTP Сервер
    $From = “user@domain.ru” # Адрес отправителя
    $To = “user2@domain.ru” # Получатель
    $pass = ConvertTo-SecureString “password” -AsPlainText -Force #Пароль от учетной записи
    $cred = New-Object System.Management.Automation.PSCredential(“user@domain.ru” , $pass) #Имя пользователя и пароль
    $emailbody ="Attached is log file about last remote login to acc.moseplc.net."
    $emailattachment = "c:\log.txt"
    
    #запрос поиска события
    $today = [int](new-timespan ([datetime]::Today)(get-date)).TotalMilliseconds
    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and EventData[Data[@Name='LogonType']=10]]"
    Get-WinEvent Security -maxevents 1 -FilterXPath $filter | Select TimeCreated,@{n="UserName";e={$_.properties[5].value}},@{n="IP";e={$_.properties[18].value}} > $emailattachment
    
    #Отправка письма.
    $mailmessage = New-Object system.net.mail.mailmessage 
    $mailmessage.from = ($from) 
    $mailmessage.To.add($to)
    $mailmessage.Subject = $lsubject
    $mailmessage.Body = $emailbody
    $attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'text/plain')
    
    $mailmessage.Attachments.Add($attachment)
    
    #$mailmessage.IsBodyHTML = $true
    
    $SMTPClient = New-Object Net.Mail.SmtpClient($Server, 25)  
    #$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$SMTPAuthUsername", "$SMTPAuthPassword") 
    $SMTPClient.Send($mailmessage)
    
    данный скрипт реагирует на событие 4624 и тип входа 10. помогите добавить тип входа 2 и чтобы письмо отправлял только в случае типа входа 2 и 10, а в остальных случаях ничего не делал.

    18 февраля 2016 г. 7:05

Ответы

  • Проверил еще раз, фильтр правильный:

    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])]"

    Чтобы не слал, поменять:

    $SMTPClient.Send($mailmessage)

    на:

    if(Test-Path $emailattachment) {
    	$SMTPClient.Send($mailmessage)
    }

    • Помечено в качестве ответа battle_hedgehog 18 февраля 2016 г. 8:35
    18 февраля 2016 г. 8:18
    Отвечающий
  • Измените trigger  в Task Scheduler на Custom и установить значение фильтра,тогда будут только события 2 и 10:

    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4624)] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])]</Select>
      </Query>
    </QueryList>

    • Помечено в качестве ответа battle_hedgehog 18 февраля 2016 г. 13:52
    18 февраля 2016 г. 12:37
    Отвечающий

Все ответы

  • EventData[Data[@Name='LogonType']=10]] заменить на:

    (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])

    18 февраля 2016 г. 7:24
    Отвечающий
  • не работает ошибка появляется

    PS D:\ps> D:\ps\test.ps1
    Get-WinEvent : Запрос задан неверно
    D:\ps\test.ps1:3 знак:1
    + Get-WinEvent Security -maxevents 1 -FilterXPath $filter | Select TimeCreated,@{n ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Get-WinEvent], EventLogException
        + FullyQualifiedErrorId : System.Diagnostics.Eventing.Reader.EventLogException,Microsoft.PowerShell.Commands.GetWinEventCommand
    до кучи надо как-то условие вставить что если тип доступа другой то действие прекращается. иначе скрипт шлёт пустые логи

    18 февраля 2016 г. 8:11
  • Проверил еще раз, фильтр правильный:

    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])]"

    Чтобы не слал, поменять:

    $SMTPClient.Send($mailmessage)

    на:

    if(Test-Path $emailattachment) {
    	$SMTPClient.Send($mailmessage)
    }

    • Помечено в качестве ответа battle_hedgehog 18 февраля 2016 г. 8:35
    18 февраля 2016 г. 8:18
    Отвечающий
  • EventData[Data[@Name='LogonType']=10]] заменить на:

    (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])


    Скорее всего участник форума забыл добавить в конце "]", т.е.  выполнил copy+paste
    т.е вместо

    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and (EventData[Data[@Name='LogonType']=10] or EventData[Data[@Name='LogonType']=2])]"
    добавил
    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and (EventData[Data[@Name='LogonType']=10] or EventData[Data[@Name='LogonType']=2])"
    P.S. а так проверил все должно работать.


    Best Regards, Andrei ...
    MCP

    • Изменено SQxModerator 18 февраля 2016 г. 8:27 добавлено
    18 февраля 2016 г. 8:26
    Модератор
  • Спасибо, вроде бы работает правильно. буду тестировать в течении дня
    18 февраля 2016 г. 8:35
  • все равно отправляет лог последнего события (прим. вход админа 2 часа назад) если тип входа не является 2 и 10

    изменил время поиска события

    $today = [int](new-timespan (get-date -hour 0 -minute 0 -second 5)).TotalMilliseconds
    теперь если тип входа не 2 и 10 то шлет пустой лог. по коду лог он в любом случае создает. как бы добавить условие что лог создается только в случае типа входа 2 и 10, или какую-то проверку на наличие содержания в теле лога


    18 февраля 2016 г. 12:24
  • Измените trigger  в Task Scheduler на Custom и установить значение фильтра,тогда будут только события 2 и 10:

    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4624)] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])]</Select>
      </Query>
    </QueryList>

    • Помечено в качестве ответа battle_hedgehog 18 февраля 2016 г. 13:52
    18 февраля 2016 г. 12:37
    Отвечающий
  • Коллеги, каким образом можно добавить в фильтр и конечную запись в файл данные о "workstation name" с которого выполнен вход?

    использую вот этот вариант скрипта


    $time = (get-date) - (new-timespan -min 60)

    $today = [int](new-timespan ([datetime]::Today)(get-date)).TotalMilliseconds

    $filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime)<=$today]] and EventData[Data[@Name='LogonType']=10]]"

    $Day = $time.day
    $Month = $Time.Month
    $Year = $Time.Year
    $name = ""+$Year+"."+$Month+"."+$Day+" Audit Logon RDP-01.txt"
    $Outfile = "\\public\#Аудит\"+$name

    Get-WinEvent Security -FilterXPath $filter | Select TimeCreated,@{n="UserName";e={$_.properties[5].value}},@{n="IP";e={$_.properties[18].value}} | out-file $Outfile -append

    26 декабря 2018 г. 7:28
  • @{n="WorkStation";e={$_.Properties[11].Value}}

    26 декабря 2018 г. 8:19
    Отвечающий
  • проставляется имя сервера на который происходит логон. а мне нужно имя удаленной машины вписывать
    26 декабря 2018 г. 11:59
  • проставляется имя сервера на который происходит логон. а мне нужно имя удаленной машины вписывать
    В таком случае взять событие и  посмотреть свойство Properties посчитав его индекс с 0.
    26 декабря 2018 г. 12:01
    Отвечающий