Powershell - 如何读取 XML 的 EventData 部分

Powershell - How to read EventData part of the XML

我正在尝试弄清楚如何在事件查看器中读取事件 ID 1085 - 详细信息 - 事件数据 - DCName

Link to the image

我可以读取 XML 的系统部分,但我不知道如何读取 EventData

到目前为止我有

  $filter = @{
     LogName = 'System'
     ID=1085
}
[xml[]]$xml = Get-WinEvent -filterHashTable $filter -MaxEvents 10 -ComputerName SERVER | %{$_.ToXml()}
$events = $xml | Select-Xml '//x:Event' -Namespace @{ x = 'http://schemas.microsoft.com/win/2004/08/events/event' } | Select-Object -ExpandProperty Node

$events.System.Computer <# -- This works #>
$events.EventData.DCName <# -- This is not working #>

如有任何建议,我们将不胜感激。

谢谢

要获得 DCName,您必须在 XML 中更深入地挖掘:

$result = Get-WinEvent -FilterHashtable @{LogName = 'System'; ID=1085} -MaxEvents 10 -ComputerName SERVER | ForEach-Object {
    # convert the event to XML and grab the Event node
    $eventXml = ([xml]$_.ToXml()).Event

    # output a PsCustomObject to collect $result
    [PsCustomObject]@{
        Computer  = $eventXml.System.Computer
        DCName    = ($eventXml.EventData.Data | Where-Object { $_.Name -eq 'DCNAME' }).'#text'
    }
}

# output on screen
$result

$eventXml.EventData.Data returns 一个节点数组,您对其 Name 属性中具有 DCName 的节点感兴趣,因此我们需要使用Where-Object 条款