Isso será um pouco longo, espero que faça sentido.
Não tenho auditoria para o 4625 no meu ambiente de teste. Usarei o ID de evento 4624 no meu exemplo. 4625 e 1142 deve ser o mesmo.
Para obter meus registros de eventos, estou usando o abaixo
[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...
Também estou usando o Select-First 1 para usar apenas o primeiro objeto de evento. Se você executar Get-Member em um desses eventos, ele fornecerá o MemberType de Methods, Properties e o que queremos, NoteProperty .
[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;}
Eu atribuirei isso a uma variável para poder extrair as informações.
[dc1]: PS C:\Users\Administrator\Documents> $event = Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624} | Select-Object -First 1
Se você executar Get-Member sobre isso, será TypeName: System.String e poderá ser usado como string.
[dc1]: PS C:\Users\Administrator\Documents> $event.Message | Get-Member
TypeName: System.String
$ event.message, neste caso, contém a maioria das informações do ID do evento. Um pequeno trecho está abaixo.
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
Se você não quiser enviar por e-mail todos os $ event.message, poderá usar o RegEx para escolher os bits desejados. Um exemplo está abaixo para pegar o domínio da conta: seção.
[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
No exemplo acima, Account Domain: aparece duas vezes, então o RegEx a encontra duas vezes. - e TIMHAINTZ.COM.
De acordo com os comentários do Mart Para obter os registros corretos do Evend ID 1149, veja o código abaixo.
Get-WinEvent -FilterHashtable @{LogName ='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational'; ID = 1149}
Espero que isso ajude.
Obrigado, Tim.