我正在尝试创建一个脚本,提取过去 24 小时内某些事件的失败登录尝试,但我不知道如何提取帐户信息。用户始终为 Null,因此信息为空白,但当我查看常规选项卡时,我可以看到“帐户信息”。
我想提取并添加 XML 视图中“事件数据”下显示的内容,即 TargetUserName。我该如何完成此操作?到目前为止,我所做的一切正常,但我需要用户名信息,而我的脚本提取的内容始终为空白。
系统 - Windows Server 2008 R2 日志 我所提取的是过去 24 小时的安全日志,事件 ID 为 4625,4768,4771,4772。
我的代码:
get-eventlog Security 4625,4768,4771,4772 -after ((get-date).addDays(-1))| export-csv
答案1
尝试以下操作,它将从事件消息中提取 TargetUserName 并将其作为新列添加到原始事件。您现在可以将其导出到目录:\temp\yourlog.csv或任何您需要的地方。
get-eventlog Security 4625,4768,4771,4772 -after ((get-date).addDays(-1)) | % {
$TargetUserName = $_.message.split("`n") | Select-String "Account Name:";
$_ | Add-Member -MemberType NoteProperty -Name TargetUserName -Value $TargetUserName[0];
$_ } | Export-CSV "c:\temp\yourlog.csv" -notypeinformation
答案2
因为事件返回一个 XML 对象,所以您必须解析它才能获取用户信息。我使用它通过任务计划程序获取锁定的帐户,然后它会通过电子邮件将 XML 信息以文本形式发送给我,以便我可以查看。它没有回答您的问题,但可能是一种解决方法。我更喜欢立即了解事件,而不是事后才知道。有一个错误,如果它触发并且同时有另一个事件,则脚本只会查看最近的事件。所以请记住这一点。对于我的设置,每天可能收到其中 1 个,这没问题。
$5MinutesAgo = [DateTime]::Now.AddMinutes(-5)
$messageParameters = @{
Subject = "User Account Locked/Unlocked on VADS01"
Body = Get-EventLog "Security" |
Where {$5MinutesAgo -le $_.TimeWritten -and ($_.eventid -eq 4740 -or $_.eventid -eq 4767)} |
Format-List |
Out-String
From = "[email protected]"
To = "[email protected]"
SmtpServer = "smtp01.domain.com" }
Send-MailMessage @messageParameters