跟踪 Windows 上的服务变化?

跟踪 Windows 上的服务变化?

应用程序经常向 Windows 添加新服务,其中一些服务即使没有必要也会自动启动,有时还会无缘无故地干扰其他程序。

有什么方法可以跟踪服务列表中发生的事情吗?例如,某个程序会定期拍摄服务列表的快照并显示最近发生了什么变化?这样,如果我的系统出现问题,我就知道该去哪里查找。

知道是否存在这样的事情吗?

(具体适用于 Windows 10)

答案1

我最终在 Windows 版 Bash 下创建了一个小型 PHP 脚本来完成这项工作。它调用wmic以获取服务列表,然后将其保存在使用 git 进行版本控制的文本文件中。它在 cron 中每天调用一次。

然后我可以使用类似的东西tig来查看随时间的变化。

在此处输入图片描述

如果有人有兴趣做类似的事情,这里有一个脚本(有点奇怪,但有效):

<?php

$wmicPath = '/mnt/c/Windows/System32/wbem/WMIC.exe';

$logDir = $_SERVER['HOME'] . '/var/log/win_services_mon';
@mkdir($logDir, 0755, true);
chdir($logDir);

$logFile = $logDir . '/services.log';

if (!file_exists($logDir . '/.git')) {
    exec('git init');
}

exec($wmicPath . ' service get name,caption,startmode > ' . $logFile);
$content = file_get_contents($logFile);
if (strpos($content, 'ÿþ') === 0) {
    $content = substr($content, 2); // Remove BOM
}
$content = str_replace("\0", '', $content); // Convert two bytes per character to one (definitely the wrong way to do this, but can't get iconv to work)
file_put_contents($logFile, $content);

exec('git add .');
exec('git commit -m "' . date('Ymd-His') . '"');

答案2

很好,但是从要求的角度来看过于复杂。

一种有效的、无需安装任何第三方软件的方法是使用批处理文件。

只需使用输出参数作为文件名+当前日期/时间运行即可wmic service get name,caption,startmode。(即>> out20170509.log,第二天输出到 out20170510.log)。

这将创建文件。

然后,您可以使用 FC(文件之间的文件比较)对另一个 bat 文件进行任务计划,该文件本身可以输出到 cmd(暂停或延迟)或另一个您可以稍后检查的文本文件。

相关内容