Недавно мы добавили возможность ко всем нашим скриптам регистрировать свои сообщения в журнале событий Windows. Это отлично подходит для коротких сообщений, но мы не можем найти способ сохранить события структурированным способом, чтобы впоследствии создавать объекты с ними.
Пример события, которое может хранить несколько свойств объекта:
Как это делается с PowerShell?
Мы пробовали следующее, как описано здесь, но не повезло:
Write-EventLog -LogName HCScripts -Source 'Test (Brecht)' -EventId 4 -Message "<Data Name=""MyKey1"">MyValue1</Data>"
В этот пост есть другие варианты, но мы не можем понять, как это сделать должным образом.
Чтение событий выполняется с помощью
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 *
Благодарим вас за помощь.