PowerShell Get-WinEvent仅显示Message属性的第一行吗?

时间:2019-03-19 11:00:45

标签: powershell parsing

熟悉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

但是我想要的是包括“描述/消息”列,以显示每个事件ID对应的内容。例如,对于事件ID,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 个答案:

答案 0 :(得分:2)

尝试一下:

$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的{​​{1}}参数来工作,以便获得返回的Group-Object结果,然后可以从中检索message属性的第一行。

我们使用Group将计算出的属性添加到包含消息的结果中。

还使用Select-Object,因此最终输出的视图不会截断第一行(如果很长)。

示例输出:

Format-Table -Wrap