【问题标题】:Command line version of Procmon [closed]Procmon 的命令行版本 [关闭]
【发布时间】:2023-04-08 14:34:01
【问题描述】:

我使用的是 Windows 7,我想监视新的 Process Create 事件。 (即为创建的每个进程获取一个条目,并提供有关它的完整详细信息。)我在 Procmon 中成功地做到了这一点,但我想在 shell 中做到这一点,并在没有 GUI 的情况下获得文本输出。

是否有执行此操作的 CLI 命令?例如我可以告诉它“请使用某某路径列出某某类型的所有事件”,它会无限期地运行,将这些过程的详细信息写入标准输出?

【问题讨论】:

  • 您可以做的是使用 C# 和酷的 Microsoft.Diagnostics.Tracing.TraceEvent nuget 包(由 Microsoft)相对轻松地构建一个。这里有一个示例stackoverflow.com/a/51722043/403671,它做了一些不同的事情,但所有事件都可用。
  • @SimonMourier 这很有趣,我探索了一些,但你想知道,我真的是第一个想要这个的人吗?
  • 嗯,在 windows 平台上(你似乎来自其他世界 :-),很多人都对 GUI 感到满意。如今,由于只有 CLI 可用的云平台,它往往会发生变化......

标签: windows process sysinternals procmon


【解决方案1】:

您可以使用Microsoft.Diagnostics.Tracing.TraceEvent nuget package 构建自己的。它是 ETW (Event Tracing for Windows) 事件的包装器,它开发了我的 Microsoft。

这里是一些示例 C# 控制台应用程序代码,显示所有进程启动和停止事件:

using System;
using Microsoft.Diagnostics.Tracing.Parsers;
using Microsoft.Diagnostics.Tracing.Session;

namespace ProcMon
{
    class Program
    {
        static void Main(string[] args)
        {
            if (TraceEventSession.IsElevated() != true)
            {
                Console.WriteLine("To turn on ETW events you need to be Administrator, please run from an Admin process.");
                return;
            }

            using (var session = new TraceEventSession("whatever"))
            {
                // handle console CTRL+C gracefully
                Console.CancelKeyPress += (sender, e) => session.Stop();

                // we filter on events we need
                session.EnableKernelProvider(KernelTraceEventParser.Keywords.Process);

                session.Source.Kernel.ProcessStart += data =>
                {
                    Console.WriteLine("START Id:" + data.ProcessID + " Name:" + data.ProcessName);
                };

                session.Source.Kernel.ProcessStop += data =>
                {
                    // stop has no name
                    Console.WriteLine("STOP Id:" + data.ProcessID);
                };

                // runs forever, press CTRL+C to stop
                session.Source.Process();
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 2021-08-04
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2011-03-03
    相关资源
    最近更新 更多