powershell 并使用 get-eventlog

powershell 并使用 get-eventlog

我正在尝试创建一个脚本,提取过去 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

相关内容