【发布时间】:2019-12-31 00:36:17
【问题描述】:
最近,我们为所有脚本添加了选项,以便在 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 *
感谢您的帮助。
【问题讨论】:
-
我假设问题可能是您所做的与定义的架构不匹配?它必须是您存储的 XML 吗?您也可以在其中轻松处理 JSON 或其他一些基于文本的对象结构。我不太了解 XML,但也许你可以让它忽略模式?也许这与它无关,在这种情况下,我的错。
-
它不一定是 XML,但它是 Windows 事件日志使用的标准。我们是否选择使用其他东西,可能是消息未正确显示在 GUI 中。 XML 通常仅在事件的 XML 详细信息窗格中可见。
标签: powershell events logging