最近我们添加了所有脚本的选项,以便在Windows事件日志中记录他们的消息。这对于短消息非常适用,但我们似乎无法找到一种以结构化方式保存事件的方式,因此我们可以稍后使用它们创建对象。如何在Windows事件日志中存储对象?
这是如何使用PowerShell做了什么?
我们试过下面所描述的here但没有运气:
Write-EventLog -LogName HCScripts -Source 'Test (Brecht)' -EventId 4 -Message "<Data Name=""MyKey1"">MyValue1</Data>"
在this post其它选项描述的也有,但我们似乎无法弄清楚如何做到这一点正常。
Function Get-WinEventDataHC {
Param (
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[System.Diagnostics.Eventing.Reader.EventLogRecord[]]$Event
)
Process {
foreach ($E in $Event){
$XML = [XML]$E.ToXml()
# Some events use other nodes, like 'UserData' on Applocker events...
$XMLData = $null
if ($XMLData = @($XML.Event.EventData.Data)){
For ($i=0; $i -lt $XMLData.count; $i++){
$Params = @{
InputObject = $E
NotePropertyName = $EventXML.Event.EventData.Data[$i].Name
NotePropertyValue = $EventXML.Event.EventData.Data[$i].’#text’
}
Add-Member @Params
}
}
$E
}
}
}
Get-WinEvent -ProviderName 'Test (Brecht)' | Select-Object -First 1 | Get-WinEventDataHC | fl *
谢谢您的帮助:
读活动与完成。
我_suppose_的问题是,你在做什么,并没有定义的模式也许匹配吗?它是否必须是您存储的XML?你可以很容易地在这里工作JSON或其他基于文本的对象结构。我不太了解XML,但也许可以让它忽略模式?或许这与它无关,在这种情况下,我的不好。 – Matt
它不一定是XML,但是它是Windows事件日志使用的标准。我们是否选择使用别的东西,可能是因为消息没有在GUI中正确显示。 XML通常只在Event的XML详细信息窗格中可见。 – DarkLite1