Powershell - 命令行文本的查询事件 4688

Powershell - Query event 4688 for command line text

关于 powershell 和 Event4688,现在可以记录在 windows 命令行中输入的文本。

有没有办法使用 powershell Get-WinEvent -FilterHashTable 来显示在事件日志的“进程命令行”中输入的内容?这将是某人在命令行中输入的实际文本。

您可以使用 Properties 访问事件消息中的属性,但您需要使用示例事件,以便比较消息和 Properties 数组以找出哪个索引是正确的字段。我认为是第9个(索引8),但你应该验证一下。

列表属性(消息中的值):

(Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    ID = 4688
} -MaxEvents 1).Properties

Value                          
-----                          
S-1-5-18                       
-                              
-                              
999                            
920                            
C:\Windows\System32\lsass.exe  
%%1936                         
784                            
           #I believe this is CommandLine                       
S-1-0-0                        
-                              
-                              
0                              
C:\Windows\System32\wininit.exe
S-1-16-16384

使用Select-Object,您可以创建自己的对象来提取ex。 TimeCreated 和 CommandLine(使用 custom/calculated 属性):

Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    ID = 4688
} | Select-Object TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='CommandLine';expression={ $_.Properties[8].Value }}

#I didn't have any values in my events

TimeCreated         NewProcessName                   CommandLine
-----------         --------------                   -----------
09.04.2016 00:56:04 C:\Windows\System32\lsass.exe               
09.04.2016 00:56:04 C:\Windows\System32\services.exe            
09.04.2016 00:56:04 C:\Windows\System32\winlogon.exe            
09.04.2016 00:56:04 C:\Windows\System32\wininit.exe             
09.04.2016 00:56:04 C:\Windows\System32\csrss.exe            

您也可以使用 XML 访问属性,但如果您列出不同的 eventid(如果属性数组中的顺序不同),这会更有用。例如:

Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    ID = 4688
} | Select-Object TimeCreated, @{name='CommandLine';expression={ (([xml]$_.ToXml()).Event.EventData.Data | Where-Object { $_.Name -eq 'CommandLine' })."#text" }}