Acompanhar as mudanças de serviço no Windows?

0

Os aplicativos geralmente adicionam novos serviços ao Windows, alguns dos quais são iniciados automaticamente, mesmo que sejam desnecessários e às vezes interfiram em outros programas sem um bom motivo.

Existe alguma maneira de acompanhar o que está acontecendo na lista de serviços? Por exemplo, algum programa que tiraria um instantâneo da lista de serviços em intervalos regulares e mostraria o que foi alterado recentemente? Dessa forma, se algo quebrar em meu sistema, sei onde procurar.

Alguma ideia se existe algo assim?

(Especificamente, é para o Windows 10)

    
por laurent 10.05.2017 / 11:13

2 respostas

0

Acabei criando um pequeno script PHP no Bash for Windows para fazer o trabalho. Ele chama wmic para obter a lista de serviços e salva isso em um arquivo de texto com versão usando o git. É chamado uma vez por dia no cron.

Então, posso usar algo como tig para visualizar as alterações ao longo do tempo.

Aquiestáoscriptsealguémestiverinteressadoemfazeralgosemelhante(éumpoucohackymasfunciona):

<?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("
<?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("%pre%", '', $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') . '"');
", '', $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') . '"');
    
por 10.05.2017 / 12:06
0

Bom, mas complexo demais do ponto de vista dos requisitos.

Uma maneira, válida sem qualquer coisa instalada por terceiros, é usar um arquivo em lotes.

Basta executar wmic service get name,caption,startmode com o parâmetro de saída como filename + currentdate / time. (isto é, > > out20170509.log, saída do dia seguinte para out20170510.log).

Isso criará os arquivos.

Em seguida, você pode programar um outro arquivo bat com FC (arquivo de comparação entre os arquivos) que pode ser enviado para um cmd (com pausa ou atraso) ou para outro arquivo de texto que você pode verificar mais tarde.

    
por 10.05.2017 / 12:24