Каждому знатоку Windows известно, что с помощью реестра можно решить очень многие задачи. Трудность заключается в том, чтобы отыскать в реестре нужный раздел. В большинстве случаев перед тем, как вносить изменения, необходимо это сделать. Или же требуется исправить название раздела (например, при организационных изменениях).
Но как найти нужный раздел? А если необходимо отредактировать не только реестр локальной машины, но и реестры удаленных компьютеров? Ответить на эти вопросы поможет утилита Regfind, которая входит в состав пакета Microsoft Windows 2000 Server Resource Kit Supplement One (работает и с реестрами Windows 9x). В простейшем случае в утилиту вводится строка искомых символов. Например, команда
regfind «acme»
отыскивает в реестре все ключи, содержащие строку acme. С помощью Regfind можно заменить одну строку другой: достаточно добавить параметр -r и новую строку. Предположим, что компания сменила название с Acme Ltd на Apex Industries, и это изменение нужно отразить во всех записях реестра, содержащих сведения о регистрации продуктов. В таком случае следует ввести команду
regfind «Acme Ltd» -r «Apex Industries»
Если в искомой строке содержится пробел или знак препинания, ее необходимо заключить в кавычки.
Если такое изменение требуется внести в реестр удаленной машины, необходимо указать параметр -m, за которым следует путь Universal Naming Convention (UNC): например,
regfind -m server03 «Acme Ltd» -r «Apex Industries»
Чтобы ускорить работу Regfind, можно ограничить область поиска конкретной ветвью реестра или разделом реестра. Указать область поиска можно с помощью параметра -p. Предположим, необходимо отыскать строку «Acme Ltd» в разделе KEY_LOCAL_MACHINESOFTWAREMicrosoft. Чтобы сузить область поиска и замены до подразделов внутри этого раздела, нужно ввести с клавиатуры
regfind «Acme Ltd» -r «Apex Industries» -p «HKEY_LOCAL_MACHINE SOFTWAREMicrosoft»
Regfind — полезный инструмент, но я обнаружил в нем ряд недостатков. Во-первых, по-видимому, в Regfind нельзя использовать символы шаблона и регулярных выражений в стиле Unix. Единственное, что можно сделать, — это применить параметр -y, который делает утилиту нечувствительной к регистру символов. Например, команда
regfind acme -y
отыщет строки acme, Acme, ACME и все другие комбинации символов верхнего и нижнего регистров. Как ни странно, параметры Regfind нечувствительны к регистру, можно указать как -R, так и -r.
Во-вторых, при выполнении операции поиска и замены инструмент заменяет все экземпляры строки. Единственный известный мне способ заменить лишь один экземпляр строки — ограничить поиск конкретной ветвью реестра, но этот метод применим далеко не всегда. Мое предложение — совпадающее с подсказкой в Regfind Help — сначала найти элемент, а затем воспользоваться глобальной функцией замены или вручную изменить нужные записи.
В-третьих, Regfind — не самый удачный инструмент для замены числовых данных (например, если нужно исправить время тайм-аута с 15 на 30). Если настроить Regfind на замену числа 15 на 30, то инструмент отыщет все разделы реестра, содержащие число 15, и поменяет его на 30. Конечно, область поиска можно ограничить лишь некоторыми подразделами раздела, но даже в этом случае она будет слишком широкой. Большинство значений типа REG_DWORD, которыми требуется манипулировать, имеет значения 1 или 0, и, скорее всего, в данном разделе или подразделе будет несколько значений типа REG_DWORD, равных 1 или 0. При попытке заменить одно значение все остальные параметры изменятся тоже.
МАРК МИНАСИ — редактоp Windows NT Magazine MCSE и автор книги «Mastering Windows NT Server 4.0» (изд-во Sybex). С ним можно связаться по адресу: mark@minasi.com.