Как стать автором
Обновить
37.96
Рейтинг
Сервер Молл
серверы HP, Dell и Lenovo: новые и восстановленные

PowerShell и Shift+Ins, или как обрести скорость Гермеса при работе с GPP

Блог компании Сервер Молл PowerShell *Серверное администрирование *Терминология IT


Буфер обмена и 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 под спойлером.
<?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.



Новый пункт контекстного меню.


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

Теги: gppгрупповые политики без болиpowershell
Хабы: Блог компании Сервер Молл PowerShell Серверное администрирование Терминология IT
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 4
Комментарии Комментарии 4

Похожие публикации

Лучшие публикации за сутки

Информация

Дата основания
Местоположение
Россия
Сайт
servermall.ru
Численность
11–30 человек
Дата регистрации

Блог на Хабре