如何列出所有活动的 ETW 会话及其输出位置(也许在 Powershell 中)?

Jon*_*han 2 etw

问题:如何查看所有打开的 ETW 会话,包括它们的根路径?我期望一些 PowerShell 命令,例如Get-EtwTraceSession,但我没有看到任何命令。

背景

我使用 EventTracing API,偶尔会发现自己因计算机上安装的内容而退出会话。

这个答案告诉我,我可以运行logman -ets查看会话列表,然后logman stop <SessionName> -ets停止一些会话。这很好,但是我怎么知道什么是神秘命名的会话呢?

我可以繁琐地查询各个会话,并从它们的根路径中获取线索:

> logman -ets SensorFramework-{c4eaa67d-dd9a-4fce-0002-000000000000}
(...)
Root Path:            C:\windows\CCM\SensorFramework  <<<< Aha! CCM = System Center Configuration Manager
Run Code Online (Sandbox Code Playgroud)

但我正在寻找更方便的解决方案。

Jon*_*han 5

解决方案:通过WMI进行:

Get-WmiObject -Class MSFT_EtwTraceSession -Namespace ROOT/Microsoft/Windows/EventTracingManagement `
| sort -Property LocalFilePath `
| ft -AutoSize -Property Name,LocalFilePath
Run Code Online (Sandbox Code Playgroud)

注意:这仅有时有效(不知道什么决定何时),有时仅显示一个会话 - Circular Kernel Context Logger。当不工作时,Get-EtwTraceSession也仅显示此会话,大概是因为它在下面使用相同的 WMI 对象。