我有从服务器日志生成的xml文件,其中包含节点。这些节点可以看起来像<Version>0</Version>
和<Data Name="LogonType">3</Data>
。我将xml加载到$ xmlData变量中。当我尝试访问前者时,$xmlData.Event.System.Version
显示0(=正确)。但是,如果我尝试用后者$xmlData.Event.EventData.LogonType
来做这件事,它就不会显示任何内容。如何访问后者?
我确实将带有xml的变量放入foreach并在其上循环以找出它为foreach创建的对象的名称,因此后者的名称应该是正确的。这样您就可以从中获取数据。你如何直接从后者获得数据?
我已经包含了一个我的xml文件的示例,但我无法将其格式化为查看器友好形式(不是一个长行,输入破坏了代码)。
<Event><System><Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}"/><EventID>4624</EventID><Version>0</Version><Level>0</Level><Task>12544</Task><Opcode>0</Opcode><Keywords>0x8000000000000000</Keywords><TimeCreated SystemTime="2018-04-18T04:51:55.703563800Z"/><EventRecordID>585</EventRecordID><Correlation/><Execution ProcessID="640" ThreadID="5608"/><Channel>Security</Channel><Computer>Computer name</Computer><Security/></System><EventData><Data Name="SubjectUserSid">S-1-0-0</Data><Data Name="SubjectUserName">-</Data><Data Name="SubjectDomainName">-</Data><Data Name="SubjectLogonId">0x0</Data><Data Name="TargetUserSid">user-id</Data><Data Name="TargetUserName">UserAcc</Data><Data Name="TargetDomainName">DomainName</Data><Data Name="TargetLogonId">tlogId</Data><Data Name="LogonType">3</Data><Data Name="LogonProcessName">Nt </Data><Data Name="AuthenticationPackageName">NTLM</Data><Data Name="WorkstationName">WorkstationName</Data><Data Name="LogonGuid">{00000000-0000-0000-0000-000000000000}</Data><Data Name="TransmittedServices">-</Data><Data Name="LmPackageName">NTLM V2</Data><Data Name="KeyLength">keyL</Data><Data Name="ProcessId">0x0</Data><Data Name="ProcessName">-</Data><Data Name="IpAddress">IpAddress</Data><Data Name="IpPort">IpPort</Data></EventData></Event>
答案 0 :(得分:1)
&#34;登录类型&#34;是一个属性值,您不能像节点或属性那样访问它。
如果我正确理解了这个问题,你可以使用管道和过滤器来读取名称属性值为&#34; logontype&#34;的节点数据的值。 (使用PowerShell 5测试):
$xml = [xml]@"...your xml.."
$xml.Event.EventData.Data | ? Name -eq LogonType | % innertext
# output 3