熟悉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.
(...)
试试这个:
$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
结果,然后我们可以从中检索消息属性的第一行。
我们使用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.