Relatório do conteúdo do log de eventos via email acionado pelo Windows 2012

1

Eu posso enviar e-mail com base no log de eventos que aciona uma ação do Agendador de tarefas que executa um script do PowerShell. No entanto, não posso transmitir nenhum dado importante que esse evento carrega. Como, por exemplo, o Visualizador de Eventos > Visualizações Personalizadas > Funções de Servidor > Eventos dos Serviços de Área de Trabalho Remota, registre o endereço IP da parte de conexão em logins bem-sucedidos. Isso é feito facilmente no Windows 2008:

link link

Mas desde a depreciação da opção de email em 2012, não consigo encontrar uma maneira óbvia de passar os valores que estão disponíveis no log de eventos. Como exemplo, aqui estão os valores que podem ser relatados por email no Windows 2008 :       Login com RDP bem-sucedido       EventID: $ (eventRecordID)       Sistema: $ (WorkstationName)       De: $ (IpAddress)       Por: $ (TargetUserName)

Eu tentei passar esses argumentos como argumentos no campo "adicionar argumentos" nas propriedades da Action como tal (com o powershell como programa / script): "-noprofile -executionpolicy bypass -arquivo C: \ Windows \ System32 \ email.successful.rdp.login.ps1 $ (IpAddress)"

Alguém tem alguma idéia de como fazer isso no Windows 2012? Eu acho que é possível consultar o último evento e exportar como arquivo e, em seguida, anexar isso ao e-mail resultante, mas eu acho que há uma maneira mais elegante de extrair os dados. Foi possível fazer em 2008, então eu diria que deveria ser em 2012.

[1]:

    
por mart 15.01.2018 / 02:41

1 resposta

1

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.

    
por 17.01.2018 / 10:16