【问题标题】:Passing xml vallues from windows events as a variables将 Windows 事件中的 xml 值作为变量传递
【发布时间】:2021-05-17 16:49:06
【问题描述】:

感谢 Powershell 向导提供的任何建议。

我正在尝试设置一个电子邮件警报,该警报将在事件时触发,但在将值作为变量传递时遇到问题,因此我可以稍后在电子邮件的正文和主题中使用它。

我有几行脚本可以提取一个事件并将其存储为 XML,但没有运气将值转换为变量以便稍后调用它。

$event = wevtutil qe 'Microsoft-Windows-Base-Filtering-Engine-Connections/Operational' /rd:true /c:1 /q:"*[System[(EventID=2000)]]" /f:renderedxml
$xmlresults = [xml]$event
$eventDate = $xmlresults.event.system.timecreated.systemtime
$eventTime = get-date $eventDate -Format ('dd-MM-yyyy hh:mm:ss')

现在当调用$xmlresults.event.eventdata.data 时,我可以看到表格中的所有值:

    PS C:\Windows\system32> $xmlresults.Event.EventData.Data

Name                                                                                                                          #text                                                                                                                       
----                                                                                                                          -----                                                                                                                       
ConnectionId                                                                                                                  1324000000003942                                                                                                        
MachineAuthenticationMethod                                                                                                   2                                                                                                                           
RemoteMachineAccount                                                                                                          DOMAIN\COMPUTERNAME$                                                                                                         
UserAuthenticationMethod                                                                                                      2                                                                                                                           
RemoteUserAcount                                                                                                              DOMAIN\USERNAME$                                                                                                         
RemoteIPAddress                                                                                                               XXXX:XXXXX:XXXX:XXXX:XXXXX:XXX:XXXX                                                                                       
LocalIPAddress                                                                                                                XXXXX:XXXX:XXXX:XXXX::1                                                                                                       
TechnologyProviderKey                                                                                                         {XXXXXX-XXXX-XXXXX-XXXX-XXXXXXXXXX}                                                                                      
IPsecTrafficMode                                                                                                              1                                                                                                                           
DHGroup                                                                                                                       0                                                                                                                           
StartTime                                                                                                                     2021-05-17T13:52:38.103Z    

如何将 RemoteMachineAccountRemoteUserAccount 的值存储为变量,以便稍后在编写电子邮件警报和日志输入时在脚本中调用它,只需使用类似于 $computer 和 @ 的内容987654327@?

非常感谢任何帮助。

【问题讨论】:

  • $xmlresults.Event.EventData.Data.Where({$_.Name -eq 'RemoveMachineAccount'}).InnerText 应该可以解决问题
  • 出色的先生,这正是我想要的。非常感谢马蒂亚斯。

标签: windows powershell event-viewer


【解决方案1】:

如果您只需要一些特定命名的属性,您可以使用.Where({}) 方法过滤 XML 提供程序返回的节点并从该特定属性中获取文本:

$RemoteMachineAccount = $xmlresults.Event.EventData.Data.Where({$_.Name -eq 'RemoteMachineAccount'}).InnerText
$RemoteUserAccount    = $xmlresults.Event.EventData.Data.Where({$_.Name -eq 'RemoteUserAccount'}).InnerText

如果您需要动态发现/使用它们,另一种选择是将节点列表转换为哈希表:

$eventData = @{}
$xmlresults.Event.EventData.Data.ForEach({ $eventData[$_.Name] = $_.InnerText })

此时您可以按名称取消引用各个属性值:

$eventData["RemoteUserAccount"]

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 2020-06-22
    • 2021-07-11
    • 2018-12-02
    • 2020-09-18
    • 2014-01-28
    • 1970-01-01
    • 2018-10-31
    • 2021-11-13
    相关资源
    最近更新 更多