修改PowerShell脚本:将Windows安全日志追加写入同一份CSV文件
修改PowerShell脚本实现安全日志追加写入CSV
以下是修改后的脚本,可将EventID为4740的Windows安全日志追加写入指定CSV文件,而非覆盖原有内容:
# 确保输出目录存在,避免因目录不存在报错 if (-not (Test-Path -Path C:\Daily_Report)) { New-Item -Path C:\Daily_Report -ItemType Directory | Out-Null } # 筛选EventID为4740的安全审计事件 $filter = "*[System[EventID=4740 and Provider[@Name='Microsoft-Windows-Security-Auditing']]]" $result = Get-WinEvent -LogName Security -FilterXPath $filter | ForEach-Object { # 将事件转换为XML格式并提取Event节点 $eventXml = ([xml]$_.ToXml()).Event # 构造需要导出的自定义对象 [PSCustomObject]@{ EventID = $eventXml.System.EventID TimeCreated = $eventXml.System.TimeCreated.SystemTime -replace '\.\d+.*$' Computer = $eventXml.System.Computer TargetUserName = ($eventXml.EventData.Data | Where-Object { $_.Name -eq "TargetUserName"}).'#text' SubjectUserName = ($eventXml.EventData.Data | Where-Object { $_.Name -eq "SubjectUserName"}).'#text' HOSTName = ($eventXml.EventData.Data | Where-Object { $_.Name -eq "TargetDomainName"}).'#text' } } # 追加写入CSV文件,自动处理表头(文件不存在时创建并写入表头,存在时仅追加数据) $result | Export-Csv -Path C:\Daily_Report\$((Get-Date).ToString("dd-MM-yyyy")).csv -NoTypeInformation -Append
关键修改说明:
- 新增目录检查:添加目录存在性判断逻辑,自动创建输出目录
C:\Daily_Report,避免运行时因目录缺失抛出错误。 - 启用追加模式:在
Export-Csv命令中添加-Append参数,这是实现追加功能的核心:- 若目标CSV文件不存在,脚本会自动创建文件并写入表头和数据;
- 若文件已存在,仅将新查询到的日志数据追加到文件末尾,不会覆盖原有内容,也不会重复写入表头。
内容的提问来源于stack exchange,提问作者Arunkumar
相关产品推荐
相关产品推荐

