我正在尝试使用Powershell的NewWinEvent来模拟某个Windows事件的创建。我尝试模拟的事件在事件查看器的XML视图中具有以下顶级结构:
<Event>
<System>
<!--ID, provider, etc-->
</System>
<UserData>
<!-- Data specific to this particular event type-->
</UserData>
</Event>
现在,我使用以下行创建的事件
New-WinEvent -ProviderName Microsoft-Windows-XXX -Id 999 -Payload @("Hello world")
使用相同的提供程序和ID,获取以下XML:
<Event>
<System>
<!--ID, provider, etc-->
</System>
<EventData>
<Data Name="EventWriteData">Hello world</Data>
</EventData>
</Event>
所以有效载荷进入
EventData
而不是
UserData
。是否可以初始化后者?如果不是通过New WinEvent,可以直接通过。NET API(例如。
System.Diagnostics.EventLog.WriteEvent()
)?
The Event schema
说:
通常,此部分将包含EventData或UserData部分。如果模板不包含UserData节,则使用EventData节。
假设事件模板是从提供程序的资源文件加载的。如果您提供(例如)两个字符串作为有效负载,cmdlet将发出警告,说明数据不符合模板。
使用
ProviderMetadata
,我已经按ID提取了该事件的模板。它是:
<template xmlns="http://schemas.microsoft.com/win/2004/08/events">
<data name="EventWriteData" inType="win:UnicodeString" outType="win:Xml"/>
</template>
这是非常通用的——字符串输入,XML输出。没有任何迹象表明
用户数据
。