Назад | Перейти на главную страницу

Отчетность о содержимом журнала событий через инициированную электронную почту Windows 2012

Я могу отправлять электронную почту на основе журнала событий, запускающего действие планировщика заданий, которое запускает сценарий PowerShell. Однако я не могу передать какие-либо важные данные, которые несет это событие. Как, например, «Просмотр событий»> «Пользовательские представления»> «Роли сервера»> «События служб удаленных рабочих столов» регистрируют IP-адрес подключающейся стороны при успешном входе в систему. В Windows 2008 это легко сделать:

https://community.spiceworks.com/scripts/show/2056-email-rdp-successful-logon https://blogs.technet.microsoft.com/otto/2007/11/09/reference-the-event-that-triggered-your-task/

Но с момента обесценивания опции электронной почты в 2012 году я не могу найти очевидный способ передать значения, доступные через журнал событий. В качестве примера приведены значения, о которых можно сообщить по электронной почте в Windows 2008: RDP Login Successful EventID: $ (eventRecordID) System: $ (WorkstationName) From: $ (IpAddress) By: $ (TargetUserName)

Я попытался передать их в качестве аргументов в поле «добавить аргументы» в свойствах действия как таковых (с PowerShell в качестве программы / сценария): «-noprofile -executionpolicy bypass -file C: \ Windows \ System32 \ email.successful.rdp.login .ps1 $ (IpAddress) "

Есть ли у кого-нибудь идеи, как это сделать в Windows 2012? Я предполагаю, что можно запросить последнее событие и экспортировать как файл, а затем прикрепить его к полученному электронному письму, но я бы подумал, что есть более элегантный способ извлечения данных. Это можно было сделать в 2008 году, поэтому я предполагаю, что это должно быть в 2012 году.

[1]:

Это будет немного долго, надеюсь, в этом есть смысл.

У меня нет аудита для 4625 в моей тестовой среде. Вместо этого в моем примере я буду использовать идентификатор события 4624. 4625 и 1142 должны быть одинаковыми.

Чтобы получить свои журналы событий, я использую приведенный ниже

[dc1]: PS C:\Users\Administrator\Documents> Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624}

ProviderName: Microsoft-Windows-Security-Auditing

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
17/01/2018 7:43:23 PM         4624 Information      An account was successfully logged on....
17/01/2018 7:42:23 PM         4624 Information      An account was successfully logged on....
17/01/2018 7:41:36 PM         4624 Information      An account was successfully logged on...

Я также использую Select-First 1, чтобы использовать только первый объект события. Если вы запустите Get-Member для одного из этих событий, он предоставит вам MemberType методов, свойств и тот, который нам нужен, Примечание.

[dc1]: PS C:\Users\Administrator\Documents> Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624} | Select-Object -First 1 | Get-Member
TypeName: System.Diagnostics.Eventing.Reader.EventLogRecord
Name                 MemberType   Definition
----                 ----------   ----------
Dispose              Method       void Dispose(), void IDisposable.Dispose()
Equals               Method       bool Equals(System.Object obj)
FormatDescription    Method       string FormatDescription(), string 
FormatDescription(System.Collections.Generic.IEnumerable[System.Object] values)     
GetHashCode          Method       int GetHashCode()
GetPropertyValues    Method       System.Collections.Generic.IList[System.Object] 
GetPropertyValues(System.Diagnostics.Eventing.Reader.EventLogPropert...
GetType              Method       type GetType()
ToString             Method       string ToString()
ToXml                Method       string ToXml()
**Message              NoteProperty string Message=An account was successfully logged on....**                                                               
ActivityId           Property     System.Nullable[guid] ActivityId {get;}
Bookmark             Property     System.Diagnostics.Eventing.Reader.EventBookmark Bookmark {get;}

Я назначу это переменной, чтобы иметь возможность извлекать информацию.

[dc1]: PS C:\Users\Administrator\Documents> $event = Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624} | Select-Object -First 1

Если вы запустите Get-Member на этом, это Имя типа: System.String и затем может использоваться как строка.

[dc1]: PS C:\Users\Administrator\Documents> $event.Message | Get-Member
   TypeName: System.String

$ event.message в этом случае содержит большую часть информации идентификатора события. Небольшой фрагмент ниже.

dc1]: PS C:\Users\Administrator\Documents> $event.Message
An account was successfully logged on.

Subject:
    Security ID:        S-1-0-0
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Information:
    Logon Type:     3
    Restricted Admin Mode:  -
    Virtual Account:        No
    Elevated Token:     Yes

Impersonation Level:        Impersonation

New Logon:
   Security ID:     S-1-5-18
   Account Name:        DC1$
   Account Domain:      TIMHAINTZ.COM

Если вы не хотите отправлять по электронной почте все $ event.message, вы можете использовать RegEx, чтобы выбрать нужные биты. Ниже приведен пример раздела "Домен учетной записи:".

[dc1]: PS C:\Users\Administrator\Documents> $regexevent = ([regex]::Matches( $event.Message, '(?<=Account\sDomain:\s\s).+').value)
[dc1]: PS C:\Users\Administrator\Documents> $regexevent
-
TIMHAINTZ.COM

В приведенном выше примере Account Domain: появляется дважды, поэтому RegEx находит его дважды. - и TIMHAINTZ.COM.

Согласно комментариям Марта Чтобы получить правильные журналы для Evend ID 1149, см. Код ниже.

Get-WinEvent -FilterHashtable @{LogName ='Microsoft-Windows-TerminalServices-RemoteConnectionManager/‌​Operational'; ID = 1149}

Надеюсь это поможет.

Спасибо, Тим.