PowerShell Get-WinEvent Отображать только первую строку свойства сообщения? - PullRequest
1 голос
/ 19 марта 2019

Знакомство с PowerShell, столкновение с множеством проблем (недостаток знаний).

Я пытаюсь составить список событий, регистрируемых в журнале безопасности Windows, по количеству, но я также могу использовать поле «дружественного» описания, которое является первой строкой свойства «Сообщение». Я не могу найти способ извлечь только это.

Таким образом, я запускаю следующее, чтобы получить обзор событий:

PS C:\TEST> Get-WinEvent -FilterHashtable @{logname="security"}| Group-Object id -NoElement | sort count

Count Name
----- ----
    1 4724
    1 4722
    1 1102
    1 4725
    2 4718
    2 6408
    2 4739
    2 1101
    2 5038
    2 4737
    3 4717
    4 6407
    4 4731
   10 4738
   16 1100
   19 4781
   22 4904
   22 4905
   35 6406
   38 5033
   38 5024
   39 4826
   39 4608
   39 4902
   40 4735
  113 4647
  156 4616
  239 5059
  355 4688
  551 4733
  557 4732
  605 4797
  965 5061
  977 5058
 1647 4798
 6364 4907
 6759 4634
 7000 4648
10950 4799
19407 4672
22049 4624

Но я хочу включить столбец «Описание / сообщение», чтобы показать, что соответствует каждому идентификатору события. Например, для идентификатора события свойство Message содержит следующее значение (?):

An attempt was made to reset an account's password.

    Subject:
            Security ID:            S-1-5-18
            Account Name:           [EDITED]
            Account Domain:         [EDITED]
            Logon ID:               0x3E7

    Target Account:
            Security ID:            [EDITED]
            Account Name:           Administrator
            Account Domain:         [EDITED]

Из всего этого сообщения я бы хотел извлечь только следующую строку:

An attempt was made to reset an account's password.

Таким образом, возвращаясь к моему первоначальному виду, в идеале это показало бы следующее:

Count Name Message
----- ---- ----
    1 4724 An attempt was made to reset an account's password.
    1 4722 A user account was enabled.
    1 1102 The audit log was cleared.
(...)

1 Ответ

2 голосов
/ 19 марта 2019

Попробуйте это:

$Events = Get-WinEvent -FilterHashtable @{logname="security"} | Group-Object id

$Events | Select-Object Count,Name,@{Name='Message';Expression={ (($_.Group.Message | Select -First 1) -Split "`n")[0] }} | Sort-Object Count -Descending | Format-Table -Wrap

Работает путем удаления параметра -NoElement из Group-Object, чтобы мы получили возвращенный результат Group, который мы затем можем получить в первой строке свойства сообщенияfrom.

Мы используем Select-Object, чтобы добавить вычисляемое свойство к результату, содержащему сообщение.

Также используем Format-Table -Wrap, чтобы представление окончательного вывода не усекало первоестрока, если она длинная.

Пример вывода:

Count Name Message                                         
----- ---- -------                                         
   81 4798 A user's local group membership was enumerated. 
   13 5379 Credential Manager credentials were read.       
    5 5061 Cryptographic operation.                        
    1 5058 Key file operation.      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...