ОК. Давайте посмотрим на этот шаблон события 4725
(Get-WinEvent -ListProvider * -ErrorAction Ignore).Events |
Where-Object {$_.Id -eq 4725} |
select * |
Format-List
Мы можем видеть, что существует TargetUserName
<data name="TargetUserName" inType="win:UnicodeString" outType="xs:string"/>
Итак, давайте разберем это Сообщение в XML, Получить-EventLog возвращает тип System.Diagnostics.EventLogEntry
Итак, сначала нам нужно изменить этот объект на System.Diagnostics.Eventing.Reader.EventLogRecord таким образом, мы можем преобразовать в XML
Мы можем сделать эфир Создайте новый вызов, используя Get-WinEvent , который вернет тип System.Diagnostics.Eventing.Reader.EventLogRecord , который имеет метод для преобразования данных в XML
Или мы можем получить индекс из текущей записи и вызвать Get-WinEvent, ищущий EventRecordID.
Ниже приведена функцияя написал, что проанализирую поле сообщения и создам новый псобъект со свойством ParsedMessage
function Parse-WindowsEvents(){
param(
[Parameter(Position=1, ValueFromPipeline)]
#[System.Diagnostics.Eventing.Reader.EventRecord[]]$Events
[object[]]$Events
)
process{
$ArrayList = New-Object System.Collections.ArrayList
$Events | %{
$EventObj = $_
$EventObjFullName = $_.GetType().FullName
if($EventObjFullName -like "System.Diagnostics.EventLogEntry"){
$EventObj = Get-WinEvent -LogName security -FilterXPath "*[System[EventRecordID=$($_.get_Index())]]"
}elseif($EventObjFullName -like "System.Diagnostics.Eventing.Reader.EventLogRecord"){
}else{
throw "Not An Event System.Diagnostics.Eventing.Reader.EventLogRecord or System.Diagnostics.EventLogEntry"
}
$PsObject = New-Object psobject
$EventObj.psobject.properties | %{
$PsObject | Add-Member -MemberType NoteProperty -Name $_.Name -Value $_.Value
}
$XML = [xml]$EventObj.toXml()
$PsObject2 = New-Object psobject
$XML.Event.EventData.Data | %{
$PsObject2 | Add-Member -MemberType NoteProperty -Name $_.Name -Value $_."#text"
}
$PsObject | Add-Member -MemberType NoteProperty -Name ParsedMessage -Value $PsObject2
$ArrayList.add($PsObject) | out-null
}
return $ArrayList
}
}
$Username = Get-EventLog –Log Security -InstanceId 4725 -Newest 1 | Parse-WindowsEvents | select -ExpandProperty ParsedMessage | select TargetUserName
$Username.TargetUserName
#or
$Username = (Get-EventLog –Log Security -InstanceId 4725 -Newest 1 | Parse-WindowsEvents | select -ExpandProperty ParsedMessage).TargetUserName
$Username