reg export excluindo específico por nome

1

eu devo exportar um conjunto de chaves de registro somente se o nome da chave não incluir uma palavra específica

ex:

reg exportar "HKLM \ SYSTEM \ CurrentControlSet \ Control \ Imprimir \ Monitores \ Porta TCP / IP padrão \ Portas"

se o nome da porta tcp / ip contiver "Session 2" ignore e pule para o próximo

tnx para ajuda

    
por Antonio 26.11.2014 / 12:37

1 resposta

0

Eu trabalhei em um script PHP para isso. Ele lê um arquivo de exportação do registro, conforme produzido pelo Regedit, e produz um arquivo semelhante, mas com as chaves de sua escolha filtradas.

O retorno de chamada recebe a chave do registro como parâmetro e deve retornar true se essa chave tiver que ser filtrada.

function filter_reg_file($inputFile, $outputFile, $callback) {

    $content = file_get_contents($inputFile);

    $content = mb_convert_encoding($content, 'UTF-8', 'UCS-2LE');
    $content = preg_replace('@^(\xEF\xBB\xBF)?Windows Registry Editor Version 5\.00\r\n\r\n@', '', $content);

    $lines = explode("\r\n", $content);
    $skipping = false;
    $result = [];

    foreach ($lines as $line) {

        if (substr($line, 0, 1) === '[') {
            $keyName = substr($line, 1, -1);
            $skipping = $callback($keyName);
        }

        if (!$skipping) {
            $result[] = $line;
        }
    }

    $result = "Windows Registry Editor Version 5.00\r\n\r\n" . implode("\r\n", $result);
    $result = "\xFF\xFE" . mb_convert_encoding($result, 'UCS-2LE', 'UTF-8');

    file_put_contents($outputFile, $result);
}


Aqui está um exemplo de uso. Tome um cuidado extra ao filtrar a chave raiz (por exemplo, BagMRU ) e as subchaves (por exemplo, BagMRU\foo\bar ).

filter_reg_file('HKCU_Software.reg', 'HKCU_Software__filtered.reg', function ($key) {

    $keysToSkip = [
        'HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU',
        'HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags',
    ];

    foreach ($keysToSkip as $keyToSkip) {
        if ($key === $keyToSkip || strpos($key, $keyToSkip.'\') === 0) {
            return true;
        }
    }

    return false;
});
    
por 11.02.2017 / 21:05