执行Get-EventLog时无法查看CommandLine属性的问题
处理PowerShell查询Security日志4688事件时CommandLine字段为空/显示"C"的问题
问题重现
执行以下PowerShell命令远程查询目标机器GLOWING-GALAXY的安全日志:
Get-Eventlog -LogName Security -ComputerName GLOWING-GALAXY -InstanceId 4688 -Newest 3 | Select-Object CommandLine
返回结果中CommandLine字段为空;以同一管理员身份在目标机器本地执行相同命令时,CommandLine仅显示为"C"。
核心原因及解决办法
1. 审计策略未开启进程创建的命令行记录
这是最常见的原因:默认Windows的进程创建审计仅记录进程基本信息,不会捕获命令行参数。需手动开启详细审计:
- 打开本地组策略编辑器(
gpedit.msc),定位到:计算机配置 > Windows设置 > 安全设置 > 高级审核策略配置 > 系统审核策略 > 详细跟踪 - 找到审核进程创建,双击打开,勾选"成功"(需记录失败事件可同时勾选)。
- 点击"配置"按钮,在"审核选项"标签下勾选**"包含命令行"**,确定保存。
- 执行
gpupdate /force刷新组策略,之后新产生的4688事件会完整记录命令行内容。
2. 改用Get-WinEvent替代旧版Get-Eventlog
Get-Eventlog是PowerShell旧版cmdlet,对事件属性的解析存在局限性,建议用Get-WinEvent直接提取事件原始属性:
# 远程查询并提取命令行 Get-WinEvent -LogName Security -ComputerName GLOWING-GALAXY -FilterXPath "*[System[EventID=4688]]" -MaxEvents 3 | ForEach-Object { [PSCustomObject]@{ TimeCreated = $_.TimeCreated CommandLine = $_.Properties[8].Value } }
注:4688事件的属性索引8对应命令行字段,可根据需求调整提取的属性内容。
3. 排查UAC远程限制(针对远程查询为空的情况)
若远程查询仍为空,检查目标机器的UAC远程设置:
- 打开注册表编辑器(
regedit),定位到HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System - 找到
LocalAccountTokenFilterPolicy,设置值为1(不存在则新建DWORD值) - 重启目标机器后重试远程查询,该设置可让本地管理员远程访问时获得完整权限。
内容的提问来源于stack exchange,提问作者Ayo
相关产品推荐
相关产品推荐

