Powershell -get-eventdata

时间:2014-03-24 23:35:18

标签: powershell

我正在尝试创建一个脚本,在过去24小时内提取失败的登录尝试某些事件,但我无法弄清楚如何提取帐户信息。用户始终为空,因此信息为空白但是当我查看常规选项卡时,我可以看到“帐户信息”。

我想拉取并添加它在“事件数据”下的XML视图中显示的内容,即TargetUserName。我怎么能这样做?到目前为止我的工作正常,但我需要用户名信息,我的脚本总是空白。

系统 - Windows Server 2008 R2 我正在提取的日志是过去24小时事件ID为4625,4768,4771,4772的安全日志。

我的代码:

get-eventlog安全性4625,4768,4771,4772 -after((get-date).addDays(-1))| export-csv

2 个答案:

答案 0 :(得分:0)

我认为您必须更改此信息,因为每个事件都有不同的消息,但如果我尝试登录失败,我可以从事件4776获取用户名:

# Get the most recent event 4776
$event = Get-EventLog -LogName Security -InstanceId 4776 -newest 1

# Pull the "Logon Account: testuser" text from the event log message
$usernameMatch = $event.Message -match 'Logon Account:\s+(?<account>.*)'

# Use the magic variable $matches which gets created by -match
if ($usernameMatch) {
    write-output "Someone tried to logon as the user $matches['account']"
}

否则,我认为你可以使用这个获取XML消息:

$event = Get-WinEvent -FilterHashtable @{id=4776} -LogName Security -maxevent 1
$event.ToXML()

答案 1 :(得分:0)

@Peter-core 似乎知道如何完成此操作,而无需解析和搜索消息正文,也无需转换为 XML。 使用以下内容查找每个事件的扩展字段(模板的一部分?):

{ name: 'Bob' }

使用 get-winevent 获取事件,您可以使用 xpath 更快地过滤数据(仅返回您感兴趣的事件开始),或者您可以在它们返回后使用 where-object 过滤它们。对于大量设备、事件日志或事件,Xpath 是更好的选择,但我讨厌尝试编写一个。

**
.distress-filter{
    clip-path: url("distress-clip-path.svg#distressPath");
    -webkit-clip-path: url("distress-clip-path.svg#distressPath");
}   
**

从那里您可以尝试实现@Peter-Core 所写的内容。我不能让它为我自己工作,但编码看起来不错。