
Буфер обмена и PowerShell ускорят, но не ослепят.
Использовать GPP для добавления файлов реестра жутко и неудобно — все эти ветки реестра, тип ключа, значения… Особенно если веток и значений изрядно. Но есть пара лайфхаков, которые могут значительно ускорить работу с групповыми политиками.
Можно, конечно, повесить logon-скрипт с командой импорта ветки реестра. Но это же не наш метод.
Способ первый. Слегка сложный
Первым вариантом можно создать свой шаблон GPO. Такой способ особенно удобен, если нужно изменять параметры значений в зависимости от пользователя. Если не хочется изучать принципы формирования шаблонов, то можно просто экспортировать «правильный» reg-файл и конвертировать его в файл шаблона при помощи скрипта REG_2_ADMXL.vbs, опубликованного в галерее скриптов Technet.
Предположим, мы хотим облегчить жизнь пользователям, прикрутив к Internet Explorer несколько поисковых машин следующим образом:
- при вводе в адресной строке «g текст запроса» запрос искался бы в Google;
- «y текст запроса» — в Яндексе;
- а «w текст запроса» — в русской Википедии.
Для этого достаточно подготовить файл реестра:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\W] @="http://ru.wikipedia.org/wiki/Служебная:Search?search=%s" [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\Y] @="http://www.yandex.ru/yandsearch?rpt=rad&text=%s" [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\G] @="http://www.google.com/search?q=%s"
Конвертируем его в шаблон следующей командой:
cscript REG_2_ADMXL.vbs IE-search.reg Ru-ru IE-search.admx
Получившийся шаблон и папку с языковым файлом закинем в каталог с шаблонами. Теперь наша политика появится в оснастке управления GPO.

Установленный шаблон.
Механизм не очень удобен в плане обслуживания, но в принципе работает. И не надо вручную ничего вбивать.
Другим вариантом будет использование командлетов PowerShell для работы с GPO. Например, для восстановления у пользователей пункта контекстно��о меню «Отправить» набор командлетов будет следующий:
Import-module -Name GroupPolicy New-GPO -Name SendTo Set-GPRegistryValue -Name "SendTo" -key "Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -ValueName SendTo -Type ExpandString -value "C:\Users\Default\AppData\Roaming\Microsoft\Windows\SendTo" Set-GPLink -Name SendTo -Target "ou=Users,dc=domain,dc=com" -LinkEnabled Yes
Так выглядит вариант только для одного ключа. Если ключей много, то для удобства придется изобретать велосипед и опять же конвертировать файл реестра в набор командлетов PowerShell.
Подробнее о работе с групповыми политиками и автоматизации всего этого можно почитать в одной из предыдущих статей «Погружение в шаблоны и приручение GPO Windows». Ну, а я расскажу о моем любимом способе.
Способ второй. Копировать — Вставить (почти)
Как вы могли заметить (я так заметил очень не сразу), в оснастке управления групповыми политиками доступны действия над объектами, в том числе и стандартные операции буфера обмена.

Контекстное меню в параметрах реестра GPP.
Если скопировать объект в буфер обмена и вставить его, то окажется, что этот объект представляет собой файл в формате xml. Это значит, что файл можно предварительно сформировать и добавить в оснастку без заполнения полей вручную.
Для этого Malcolm McCaffery написал специальный скрипт. Он формирует файл xml на основе экспортированного файла реестра. Скрипт можно взять в блоге автора.
В скрипте у автора присутствуют лишние вызовы функции Convert-Reg2Xml и лишний блок параметров. Эти ошибки легко исправить при тестовом запуске через PowerShell ISE. Тем не менее я на всякий случай закинул исправленную версию на pastebin. Также существует и форк этого скрипта на github, и даже онлайн-сервис, который делает то же самое.
Использование скрипта предельно простое.
Convert-Reg2Xml -regPath input.reg -xmlPath output.xml
Получившийся xml можно даже просто перетащить в поле для параметров реестра.
Разберем конкретный пример. Для начала экспортируем «правильную» ветку реестра. В этом примере мы сделаем политику для включения отображения скрытых файлов, папок, расширений и заодно сделаем автозапуск ctfmon.exe для беспроблемной смены раскладки.
Файл реестра получился такой:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "Hidden"=dword:00000001 "HideFileExt"=dword:00000000 "ShowSuperHidden"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] "Language Bar"=""ctfmon”=”CTFMON.EXE”
Преобразуем его в xml. Если посмотреть в получившийся файл, он уже будет таким:
<?xml version="1.0" encoding="utf-8"?> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="HKEY_CURRENT_USER"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Software"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Microsoft"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Windows"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="CurrentVersion"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Explorer"> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Advanced"> <Registry clsid="{9CD4B2F4-923D-47f5-A062-E897DD1DAD50}" name="Hidden" descr="Imported Reg File" image="17"> <Properties action="U" hive="HKEY_CURRENT_USER" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" name="Hidden" default="0" type="REG_DWORD" displayDecimal="0" value="00000001" /> </Registry> <Registry clsid="{9CD4B2F4-923D-47f5-A062-E897DD1DAD50}" name="HideFileExt" descr="Imported Reg File" image="17"> <Properties action="U" hive="HKEY_CURRENT_USER" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" name="HideFileExt" default="0" type="REG_DWORD" displayDecimal="0" value="00000000" /> </Registry> <Registry clsid="{9CD4B2F4-923D-47f5-A062-E897DD1DAD50}" name="ShowSuperHidden" descr="Imported Reg File" image="17"> <Properties action="U" hive="HKEY_CURRENT_USER" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" name="ShowSuperHidden" default="0" type="REG_DWORD" displayDecimal="0" value="00000001" /> </Registry> </Collection> </Collection> <Collection clsid="{53B533F5-224C-47e3-B01B-CA3B3F3FF4BF}" name="Run"> <Registry clsid="{9CD4B2F4-923D-47f5-A062-E897DD1DAD50}" name="Language Bar" descr="Imported Reg File" image="7"> <Properties action="U" hive="HKEY_CURRENT_USER" key="Software\Microsoft\Windows\CurrentVersion\Run" name="Language Bar" default="0" type="REG_SZ" displayDecimal="0" value=""ctfmon”=”CTFMON.EXE”" /> </Registry> </Collection> </Collection> </Collection> </Collection> </Collection> </Collection>
Теперь можно просто вставить его в поле настройки параметров реестра. Получится такая красота:

Настроенная политика.
При должной сноровке процесс занимает меньше времени, чем чтение этого текста.
Для повышенного удобства можно добавить пункт для файлов реестра в контекстном меню, чтобы конвертировать файлы вообще в два клика.
Достаточно будет создать новый тип действия для объектов типа regfile и прописать путь к нужному скрипту. Для вашего удобства я скомпоновал это, конечно же, в файл реестра:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\regfile\shell\convert2xml] @="convert2xml" [HKEY_CURRENT_USER\Software\Classes\regfile\shell\convert2xml\command] @="powershell.exe -File C:\\temp\\script.ps1 %1"
Путь к скрипту задается в последней строке.
Чтобы скрипт отрабатывал такое, необходимо добавить в него следующие строки:
$output=(Split-Path -Path $args[0]) + "\output.xml" Convert-Reg2Xml -regPath $args[0] -xmlPath $output
Теперь при вызове контекстного меню отобразится еще один пункт, при нажатии на который рядом с файлом реестра появится нужный нам файл xml.

Новый пункт контекстного меню.
Конечно, для внесения простых изменений в реестр пользователей и компьютеров такие механизмы — лишнее. А вот для настройки большого количества параметров эти лайфхаки весьма удобны.
