【发布时间】:2015-04-19 11:50:21
【问题描述】:
问题:如何使用 PowerShell 编写包含结构化 XML 数据的事件日志条目?
我的 PowerShell 脚本使用 Write-EventLog cmdlet 写入 Windows 事件日志。目前我使用-Message参数来设置事件日志消息:
Write-EventLog -LogName $EventLogName -Source $EventSource -EntryType Error -EventId 1 -Message "MyMessageHere"
如果您使用 Windows EventViewer 查看消息,您会得到如下 XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
[...]
</System>
<EventData>
<Data>MyMessageHere</Data>
</EventData>
</Event>
即消息被设置为事件数据。现在我想编写结构化事件数据,其中 Data 元素的内容是 XML(请参阅您自己的 Windows\Security 日志以获取示例)。
我尝试使用Write-EventLog 如下:-Message "<Data Name=""MyKey1"">MyValue1</Data> 但不能正常工作,看起来消息作为 CDATA 添加到 Data 元素内部。
那么,如何使用 PowerShell 编写包含结构化 XML 数据的事件日志条目?
【问题讨论】:
-
实际上,我希望它被添加为 CDATA。这是将任意文本数据嵌入现有 XML(Event 已经是什么)中的唯一“安全”方式。但为什么这是一个问题?当您阅读您的事件时,您知道您的数据实际上是 XML 并且可以这样使用它。
-
客户有一个工具可以发现正确的 XML 并收集数据。它不适用于 CDATA。 (这也是记录事件数据的正确方法,甚至 Windows EventViewer 也会注意到“真实”XML 并将其显示为与 CDATA 相比的树状结构)
-
据我了解,XML 数据是 Vista 附带的新事件日志接口的一部分,需要您注册清单——您不能只在其中转储任何旧 XML。有关在 .NET 中执行此操作的包,请参阅 blogs.msdn.com/b/dotnet/archive/2013/08/09/… - 在 PowerShell 中使用此功能需要使用自定义 cmdlet 包装该代码。简而言之:不是微不足道的。
标签: xml powershell powershell-3.0 event-log