php / dos: Как вы анализируете файл экспорта regedit? - PullRequest
2 голосов
/ 23 февраля 2009

Моя цель - найти значение ключа компании в кусте реестра, а затем извлечь соответствующий Guid и другие ключи и значения, следующие за ним. Итак, я решил запустить команду экспорта regedit, а затем проанализировать файл с помощью php и найти нужные мне ключи.

Итак, после запуска пакетной команды dos

>regedit /E "output.txt" "HKLM\System....\Company1" 

Выходной текстовый файл, похоже, находится в каком-то формате UNICODE, который не поддерживает регулярные выражения. Я использую php, чтобы разобрать файл и потянуть ключи.

Вот код php, который я использую для разбора файла

<?php 

$regfile = "output.txt";


$handle = fopen ("c:\\\\" . $regfile,"r");
//echo "handle: " . $file . "<br>";
$row = 1;


while ((($data = fgets($handle, 1024)) !== FALSE) ) {

    $num = count($data);
    echo "$num fields in line $row: \n";

$reg_section = $data;   
//$reg_section = "[HKEY_LOCAL_MACHINE\SOFTWARE\TECHNOLOGIES\MEDIUS\CONFIG MANAGER\SYSTEM\COMPANIES\RECORD11]";

$pattern = "/^(\[HKEY_LOCAL_MACHINE\\\SOFTWARE\\\TECHNOLOGIES\\\MEDIUS\\\CONFIG MANAGER\\\SYSTEM\\\COMPANIES\\\RECORD(\d+)\])$/";
if ( preg_match($pattern, $reg_section )) { 

echo "<font color=red>Found</font><br>"; 

} else { 
echo "not found<br>"; 
echo $data . "<br>";
}
$row++;
} //end while 
fclose($handle);


?> 

и вывод выглядит так ...

1 поле в строке 1: не найдено ÿþW i n d o w s R e g i s t r y E d i t o r V e r s i o n 5 . 0 0 1 поля в строке 2: не найден

1 поле в строке 3: не найдено [HKEY LOCAL MACHINE \ SOF TWARE \ INTERSTAR ТЕХНОЛОГИИ \ XMEDIUS \ CONF И.Г. МЕНЕДЖЕР \ SYSTEM \ Фирмы] 1 поле в строке 4: не найдено " N e x t R e c o r d I D " = " 4 1 " 1 полей в строке 5: не найдено

Есть идеи, как к этому подойти?

заранее спасибо

Ответы [ 4 ]

1 голос
/ 22 марта 2010

Попробуйте добавить / A к команде REGEDIT следующим образом, чтобы получить совместимый вывод:

REGEDIT /E /A "output.txt" "HKEY_LOCAL_MACHINE\System....\Company1"

1 голос
/ 23 февраля 2009

Я знаю, что для этого есть библиотека Perl:

Разобрать :: Win32Registry

Создание PHP-класса не должно быть слишком сложным. Также есть расширение PECL для PHP, которое будет анализировать код Perl:

http://devzone.zend.com/node/view/id/1712

0 голосов
/ 28 февраля 2009

Из Windows XP экспорт Regedit - это Unicode и, следовательно, 2 байта. Вы увидите это, если откроете экспорт в блокноте. Я не уверен, что более старые версии php могут обрабатывать файлы Unicode.

Нет ли способа прочитать нужный ключ? Через другой инструмент и т. Д. Это был бы гораздо более простой подход.

0 голосов
/ 23 февраля 2009

Регулярные выражения отлично работают с юникодом. Вы получаете конкретное сообщение об ошибке?

...