电源外壳 |来自 Get-WinEvent 的属性 (System.Collections.Generic.IList)



我正在运行这个(第 1 行很好,只是我知道第 2 行不对):

$specificEvent = Get-WinEvent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Security-Auditing";Id=4648} | select -First 1 
$specificEvent | ? {($_).Properties[1] -eq "whatever"}

而且它不起作用。并不感到惊讶,但是有没有一种真正的方法来获取System.Collections.Generic.IList类型的属性数据?

我也可以通过这种方式访问相同的数据:

$specificEvent | % {
    ([xml]$_.ToXml()).Event.EventData.Data
}

但同样我不知道如何在 where-object 中利用它。

我还想知道是否有人知道如何在选择对象中显示该数据(而不是在 foreach 循环中处理),因此当我最终开始过滤工作时,我可以显示我需要的内容。

对于任何愿意提供帮助的人,非常感谢!

更新:根据下面提供的答案,我能够编写此代码。它并不完美,但可以很好地完成工作

$EventIDs = (Get-WinEvent -FilterHashtable @{
    "ProviderName"="Microsoft-Windows-Security-Auditing";
    StartTime=(get-date).AddHours(-24);
    Id=4625} | select RecordID).RecordID
Foreach ($r in $EventIDs) {
    $EvXML = $null
    [xml]$EvXML = (Get-WinEvent -LogName "Security" -FilterXPath "*[System[EventRecordID=$($r)]]").ToXML()
    $Events = $null
    $Events = For ($i=0; $i -lt $EvXML.Event.EventData.Data.Count; $i++) {
        New-Object -TypeName psobject -Property (
            [ordered]@{Name  = $EvXML.Event.EventData.Data[$i].Name
            Value = $EvXML.Event.EventData.Data[$i].'#text'}
        )
    }
    write-host ($events | ? {$_.Name -eq "TargetUserName"}).value "|" ($events | ? {$_.Name -eq "TargetDomainName"}).value "|" ($events | ? {$_.Name -eq "IPAddress"}).value ":" ($events | ? {$_.Name -eq "IPPort"}).value
}

从事件日志中提取数据时,我所做的是首先将我想要的日志获取到 XML 类型变量中,然后将变量数据转换为对象,如下所示:

 [xml]$EvXML = (Get-WinEvent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Security-Auditing";Id=4648} -MaxEvents 1).ToXML()
 $Event = For ($i=0; $i -lt $EvXML.Event.EventData.Data.Count; $i++) {
    New-Object -TypeName psobject -Property ([ordered]@{Name  = $EvXML.Event.EventData.Data[$i].Name
                                                        Value = $EvXML.Event.EventData.Data[$i].'#text'})
 }

一旦数据是一个对象数组,您就可以像任何其他 PS 对象数组一样对它做任何您想做的事情。如果需要系统数据,请将$EvXML.Event.EventData替换为$EvXML.Event.System,然后可以关闭所需的任何字段。若要查看可用于任何事件的内容,请参阅事件查看器中的 XML 视图。然后,您将能够通过引用$Event[#].Name$Event[#].Value来提取和处理所需的任何单个数据。

相关内容

最新更新