如何使用PowerShell从SMBServer审计日志提取客户端地址
提取SMBServer审计日志EventID 3000中的客户端IP地址
你可以通过修改Select-Object的逻辑,用正则表达式从Message字段中提取Client Address:后的IP地址,替换原有的完整Message内容,同时输出符合要求的格式。
修改后的PowerShell脚本如下:
$eventId = 3000 $logName = 'Microsoft-Windows-SMBServer/Audit' $logs = Get-WinEvent -FilterXPath "*[System/EventID=$eventId]" -LogName $logName -ErrorAction SilentlyContinue | Select-Object TimeCreated, Id, @{ Name = 'Message' Expression = { # 正则匹配Client Address后的IPv4地址 if ($_.Message -match 'Client Address:\s+(\d+\.\d+\.\d+\.\d+)') { $matches[1] } else { # 匹配失败时返回占位符,可按需调整 'N/A' } } } # 输出指定格式的内容 "TimeCreated, Id, Message" $logs | ForEach-Object { "$($_.TimeCreated), $($_.Id), $($_.Message)" }
关键说明
- 用计算属性(
@{Name=; Expression=})替换原Message字段,通过正则表达式精准捕获IP:\s+匹配Client Address:后任意数量的空白字符(\d+\.\d+\.\d+\.\d+)捕获标准IPv4地址格式
- 若日志中未匹配到IP,会返回
N/A作为占位符,可根据需求修改为空白或其他标识
示例输出
TimeCreated, Id, Message 12/31/2023 3:41:09 AM , 3000, 10.10.7.7 12/31/2023 3:41:09 AM , 3000, 10.10.7.15
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

