1 (изменено: Rom5, 2011-11-19 04:02:15)

Тема: HTA/CMD: Инструмент редактирования реестра удаленной системы

Коллеги, предоставляю Вашему вниманию свою HTA-разработку - интерфейс редактирования пользовательских (и hklm) веток реестра удаленной машины. Приложение задумывалось как инструмент с претензией на универсальность, т.е. функционал расширяется пользователем.

Основная идея: HTA-приложение может не только читать интересуемые нас значения в требуемых ветках пользователей, но и предоставляет возможность редактировать значения, причем делается это легко как для ключей текущего пользователя с автоматической подстановкой SID, так и для неактивных пользователей, ульи которых удобно загружаются и выгружаются.

Перечень интересуемых веток и их значений не "зафиксирован" в коде программы, а составляется пользователями ПО в виде текстовых файлов несложной структуры - шаблонов.
Т.е. админу не нужно держать в голове точный путь к какому-то контролируемому ключу-значению, достаточно всего лишь дать файлу-шаблону лаконичное название (+ вставить в шаблон комментарий), а в программе выбрать этот шаблон в списке.

К слову, кроме относительного пути к ветке и перечня зачений в ней, в шаблон можно заложить и вызов внешних команд с передачей параметром сформированного пути ветви, имени машины.
Таким образом у меня этот HTA с набором шаблонов может дополнительно делать еще и следующее:
- полное удаление ветви (в шаблон закладывается команда "reg delete ...");
- создание/изменени в ветке значения на предопределенное (команда - "reg add ... /v .... /t ... /d ....");
- изменение прав на ветвь (команда - "subinacl.exe /keyreg ... /grant=...");
- запуск батников, выполняющих целый набор действий в реестре - подставляются параметры для них: имя машины для hklm / путь к веткам пользователя - для HKU.

Программа также запускает regedit.exe с подключением удаленного реестра - отдельный скомпилированный модуль на AutoIt3.

При сканировании указанного компьютера программа составляет список пользователей, кусты чьих реестров можно загрузить - сначала определяется список известных системе профайлов (из HKLM\SYSTEM\CurrentControlSet\Control\hivelist), который далее ограничивается лишь теми, ntuser.dat которых фактически есть в наличии. Программа отображает профайлы уже загруженные удаленной системой и профайлы подгруженные в наш реестр. По умолчанию выбирается для работы текущий пользователь консоли. Для систем WinXP еще есть и данные по времени последней загрузки профилей системой, а в 7-ке, увы, это уже атавизм.

Для визуального контроля программа также выбирает из AD информацию по машине и ее менеджеру, см. скриншоты.

Отображение данных (WinXP):
http://s2.ipicture.ru/uploads/20111119/CnJ4Sef4.png

Чтение и редактирование значения:
http://s2.ipicture.ru/uploads/20111119/PUWn1icP.gif

К слову, пользователь по ходу работы в програме имеет еще и такую гибкость: название как ветви так и параметра предлагаемые текущим шаблоном можно перед выполнением команд проверок/чтения/записи произвольно редактировать (сам шаблон в приложением не изменяется).

Код RegLoadHIVE.hta около 60Кб - выкладываю архивом (вместе с моими шаблонами): http://depositfiles.com/files/pmlxvll7n

Autoit3-модуль (из-за возможности повышения прав) запуска редактора реестра с подключением машины (Run_RegEdit_Win7.exe): http://depositfiles.com/files/9jdxzuekb

О шаблонах. Шаблон - это текстовый файл с раширением ".reg_load" вместо ".txt".
В шаблонных файлах указываются строки:
"root=" - корень реестра, поддерживаются HKLM и HKU,
"key" - ветка реестра, наличие которой или параметры которой нас интересуют,
например, Software\Microsoft\Windows\CurrentVersion\Internet Settings
"name=" - название параметра, значение которого хотим прочесть/редактировать,
строк-параметров может быть несколько либо ни одного (в случае интереса только лишь к самой ветке),
"cmd=" - командные строки запуска внешних утилит, например, для контроля прав на ветку, удаления ветки и т.п.,
в тексте строк можно использовать подстановки - {root} / {key} / {name} / {pathsid} / {pc},
например, subinacl.exe /keyreg {root}\{key} /display
или - reg.exe query "{pathsid}\{key}" /v {name}
"note=" - собственное описание шаблона/параметров и т.п. (возможны теги html-разметки)

Придирки к коду, отзывы, пожелания - принимаются

WBR. Roman

2

Re: HTA/CMD: Инструмент редактирования реестра удаленной системы

Пара месяцев пользования программой RegLoadHIVE.hta показало, что функционал использования внешней команды reg.exe сильно зависит от версии операционки - то поиск как таковой отсутствует, то раздел нельзя удалить, то чего-то доступиться не может.

Посему программа была немножко доведена именно в плане скриптовой работы с реестром:
- можно запросить список подключей раздела
- можно удалить весь раздел (рекурсивных обход подключей скриптом)
- можно "доукомплектовать" select выбора параметров заложенных в шаблоне всеми имеющиеся в наличии в ветке
- можно все значения выгрузить в текст (это не скриптом, а перенаправлением в файл внешней команды reg.exe .. /s)


Также по ходу использования добавились и сами шаблоны: определение установленных фреймворков и версий "библиотек окружения" GAC, смена значений .nls кодовой страницы.

Самыми же "ходовыми" оказались такие шаблоны: изменения системных переменных Path и nls_lang (Win7), включение и правка у пользователя Proxy, правка пути к пользовательскому Desktop, контроль в ProfileList наличия темповых профайлов (Win7), поиск версий фреймворка, удаление ветки групповых политик (SOFTWARE\Policies\Microsoft), лечение отказа подключения Remote Desktop (значение fDenyTSConnections).


Скрипт и шаблоны обновляются на страничке программы - regloadhive-hta(sites.google.com)

WBR. Roman

3

Re: HTA/CMD: Инструмент редактирования реестра удаленной системы

Роман, а почему стали писать этот инструмент, вместо использования GP?

4

Re: HTA/CMD: Инструмент редактирования реестра удаленной системы

Групповые политики конечно же используются, инструмент - помощь в решении разнообразных вопросов/проблем в инсталляциях ПО, работы ОС и т.д.

Кстати, вопрос к присутствующим - скриптами можно удалять, читать, создавать ключи реестра, а можно ли как-то преименовывать ветки?

Было бы удобно возвращать на Вин-7 в работу "боевой" профайл, который переименовывается системой при сбое регистрации пользователя и создании темп-профайла.

WBR. Roman

5

Re: HTA/CMD: Инструмент редактирования реестра удаленной системы

Rom5 пишет:

[..]
Кстати, вопрос к присутствующим - скриптами можно удалять, читать, создавать ключи реестра, а можно ли как-то преименовывать ветки?

Было бы удобно возвращать на Вин-7 в работу "боевой" профайл, который переименовывается системой при сбое регистрации пользователя и создании темп-профайла.

Т.к. переименовывать ветви можно только в самом Regedit-е, то именно для подобных случаев для своей RegLoadHIVE.hta был написан autoit-овский скрипт (Run_RegEdit_keyHost.au3) запуска программы Regedit с вызовом подключения удаленного реестра, этот скрипт после подключения реестра выполняет в окне Regedit "заветную хотелку" - переход к интересуемой ветке для дальнейших манипуляций с веткой (переименований, экспорта и пр.) в самом Regedit.

Аутоитовского раздела на нашем форуме уже нет, то интересующиеся исх.кодом/exe могут взять его вместе с комплектом шаблонов hta-программы на ее страничке гугл-сайтов - regloadhive-hta, а обсуждение именно аутоитовсой части можно вести на форуме autoit-script.ru в теме [Автоматизация] Переход в Regedit к требуемой ветке в реестре удаленной системы

Кстати, а сама RegLoadHIVE.hta научилась на удаленном хосте проверять и включать сервис "RemoteRegistry" - проверяет состояние сервиса, меняет метод старта и запускает его.

WBR. Roman

6

Re: HTA/CMD: Инструмент редактирования реестра удаленной системы

Rom5 пишет:

Т.к. переименовывать ветви можно только в самом Regedit-е,

На самом деле — и в нём невозможно: при переименовании в реальности происходит создание и удаление.