跟踪 WMI 活动

从 Windows Vista 开始,WMI 服务不再使用 WMI 日志文件。 相反,它使用 Windows 事件跟踪 (ETW),并且可以通过事件查看器或 Wevtutil 命令行工具获取事件

本主题讨论以下部分:

通过事件查看器获取 WMI 事件

WMITracing.log 文件包含 WMI 跟踪的事件。 但是,这是一个二进制文件。 若要以人类可读格式查看这些事件,请使用事件查看器

默认情况下,不跟踪 WMI 事件。 此过程描述如何使用事件查看器启用 WMI 事件跟踪和定位 WMI 事件。 可以通过 wevtutil 命令行工具执行相同的操作。

在事件查看器中查看 WMI 事件

  1. 打开“事件查看器”。 在“查看”菜单上,单击“显示分析和调试日志”。 在“应用程序和服务日志”|“Microsoft”|“Windows”|“WMI 活动”下找到 WMI 的“跟踪”通道日志
  2. 右键单击“跟踪”日志并选择“日志属性”。 单击“启用日志记录”复选框,启动 WMI 事件跟踪。 有关通道的详细信息,请参阅 Windows 事件日志中的事件日志和通道
  3. WMI 事件显示在 WMI-Activity 的事件窗口中。 双击列表中的事件以查看详细信息。 可以以 XML 视图或可读视图格式查看事件

Event ID 字段显示一个包含以下信息的值

事件 1

特定操作的事件序列的开头。 每个序列出现一次。

事件 1 的事件字段如下:

  • GroupOperationID 是一个唯一标识符,用于为特定客户端报告的所有事件
  • OperationId 表示操作序列
  • Operation 指定与 WMI 的连接或对 WMI 的请求
  • User 表示通过运行脚本或通过 CIM Studio 向 WMI 发出请求的帐户
  • Namespace 显示建立了连接的 WMI 命名空间

例如,脚本可能请求 WMI 类的所有实例,例如 Win32_Service。 第一个操作可能是连接到 WMI。

事件 2

构成操作的事件。 序列中出现一次或多次。

事件 2 的事件字段如下:

  • GroupOperationID 指示事件发生的顺序
  • GroupOperationID 指示事件发生的顺序
  • ProviderName 指示提供数据的提供程序的名称
  • Path 是对象的 WMI 路径

例如,该操作可能是 Win32_Service 的枚举

事件 3

特定操作的事件序列的末尾。 每个序列出现一次。

仅显示 GroupOperationID

在命令提示符下启用 WMI 跟踪

你还可以通过 Wevtutil 命令行工具启用 WMI 事件跟踪。 使用以下命令:Wevtutil.exe sl Microsoft-Windows-WMI-Activity/Trace /e:true。 WMI 事件源是 Microsoft-Windows-WMI。 有关 Wevtutil.exe 的详细信息,请参阅关于 Windows 事件日志

使用基于 WPP 的 WMI 跟踪

在从 Windows Vista 起的 Windows 操作系统中,WMI 在引导过程中创建活动跟踪通道。 该通道的名称为 WMI_Trace_Session。 只有错误会记录到该通道中。

Windows 软件跟踪预处理器 (WPP) 将信息记录在二进制文件中。 若要阅读该文件,必须先将其转换成可读的文本格式。 可以使用 Windows 驱动程序工具包 (WDK) 中名为 tracefmt.exe 的工具进行转换。 该工具需要某些关联文件中存储的信息。 这些文件位于 %SystemRoot%\System32\wbem\tmf 目录中,且文件扩展名为 .tmf。 该工具实际上只需要一个 .tmf 文件。 可以通过将所有 .tmf 文件连接到另一个 .tmf 文件来创建该 .tmf 文件。 有关 .tmf 文件的详细信息,请参阅跟踪消息格式文件

安装 Windows 驱动程序工具包 (WDK) 以获取 tracelog.exe 和 tracefmt.exe 命令行工具后,执行以下步骤,收集基于 WPP 的 WMI 跟踪。

查看基于 WPP 的 WMI 跟踪

  1. 若要创建该 .tmf 文件,请打开提升的命令提示符窗口并导航到 %SystemRoot%\System32\wbem\tmf 目录。

  2. 键入 copy /y %SystemRoot%\System32\wbem\tmf\*.tmf %SystemRoot%\System32\wbem\tmf\wmi.tmf。 这将创建一个名为 wmi.tmf 的文件,其中包含所有其他 .tmf 文件的内容。

  3. 键入 tracelog -flush WMI_Trace_Session。 这将刷新磁盘上的 WPP 缓冲区。

  4. 键入 set TRACE_FORMAT_PREFIX = [%9!d!]%8!04X!.%3!04X!.%3!04X!::%4!s![%1!s!](%!COMPNAME!:%!FUNC !:%2!s!)。 tracefmt 工具向每条跟踪消息添加一些默认信息。 可以通过设置 TRACE_FORMAT_PREFIX 环境变量来配置包含哪些信息。 若要了解所用的语法,请参阅跟踪消息前缀

  5. 键入 tracefmt -tmf %systemroot%\system32\wbem\tmf\wmi.tmf -o OUTPUT.TXT %systemroot%\system32\wbem\logs\WMITracing.log。 这将执行从二进制格式到可读文本格式的转换。

  6. 键入 notepad %systemroot%\system32\wbem\tmf\OUTPUT.TXT。 这将在记事本中打开跟踪文件。

以下是可能需要执行的其他一些与 WPP 相关的任务。

停止基于 WPP 的 WMI 跟踪

  • 键入 tracelog -stop WMI_Trace_Session

启动基于 WPP 的 WMI 跟踪

  • 键入 tracelog -start WMI_Trace_Session -guid #1FF6B227-2CA7-40f9-9A66-980EADAA602E -rt -level 5 -flag 0x7 -f MYTRACE.BIN

Windows Vista:默认情况下,基于 WPP 的 WMI 跟踪设置为仅包含错误消息的级别 2。 若要同时包含信息性消息,请将级别设置为 4。 默认情况下,跟踪 WMI 的所有区域。 可以跟踪三个不同的区域:Core (flag=0x1)、ESS (flag=0x2) 和 Prov (flag=0x4)。 在上述的 start 命令中,flag 0x7 指示跟踪全部三个区域

Windows 7:默认情况下,基于 WPP 的 WMI 跟踪已禁用并设置为级别 0。 若要使用基于 WPP 的 WMI 跟踪,必须启用此功能并将其设置为包含错误消息的级别 2 或同时包含错误消息和信息性消息的级别 4。

列出所有 WPP 跟踪会话

  • 键入 tracelog -l

列出有关 WMI WPP 跟踪会话的信息

  • 键入 tracelog -l | findstr /i "wmi_trace"

查看 WMI WPP 跟踪会话参数

  • 键入 tracelog -q WMI_Trace_Session

WMI 故障排除

WMI 日志文件