Итак, у нас есть задача - создать свой набор свойств для групповой политики. Так называемый Administrative template, который можно импортировать из ADM-файла в список уже существующих групповых политик и так-же управлять с его помощью значениями реестра, как и со встроенными свойствами.
Давайте разберемся сначала - что делают групповые политики. Групповая политика изменяет на группе компьютеров (определяемой некими условиями) некий набор значений реестра. Так, если мы хотим всем компьютерам группы указать использовать домашнюю страницу для Internet Explorer "такую-то", то мы всего-лишь приказываем Windows для всех компьютеров группы изменить параметр реестра, отвечающий за домашнюю страницу, на соответствующий.
По итогу, групповые политики - это набор указаний - какие параметры реестра и на какие значения необходимо поменять или применять у указанной группы компьютеров.
Таким образом, создавая свой шаблон (Administrative Template), мы создаем указатели на некоторые ключи реестра, которые мы хотим изменять. Мы можем указывать все типы значений реестра, кроме двух следующих:
а) REG_MULTI_SZ
б) REG_BINARY
т.е. мы не можем через групповые политики применять наборы данных (REG_BINARY) или многострочные наборы (REG_MULTI_SZ).
Далее. Групповые политики делятся на "Пользователя" и "Компьютера". Соответственно, первые применяются на уровне пользователя (т.е. для одного компьютера, но разных пользователей будут разные групповые политики), вторые - на уровне компьютера (т.е. для одного компьютера для всех пользователей будет применена одна и та же групповая политика).
Теперь свяжем это с реестром. Пользовательские политики касаются только раздела:
HKEY_CURRENT_USER
в то время, как политики компьютера:
HKEY_LOCAL_MACHINE
Структура файла ADMФайл ADM является простым текстовым файлом. Его Вы можете редактировать через блокнот или любой другой текстовый редактор (не Word, конечно, и не Libre/Open Office - нам нужен чистый текстовый формат).
Просто пишем файл (да в том-же FAR) и сохраняем его с расширением .adm по пути:
c:\windows\inf\
с нужным Вам именем. Например:
c:\windows\inf\mypolicy.adm
Файл имеет следующую структуру:
; remark
CLASS xxx
CATEGORY "xxx"
KEYNAME "xxx"
POLICY "xxx"
VALUENAME xxx
END POLICY
END CATEGORY
Итак, начнем пояснения.
Символ ";" (точка с запятой), если стоит в начале строки - означает, что дальше, до конца строки - идут комментарии.
CLASS. Мы с Вами разобрались, что групповые политики могут применяться к пользователям и компьютерам. CLASS - это имено указатель - куда следует ломиться для применения параметров - в HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE. Соответственно, значения он может принимать "CLASS USER" или "CLASS MACHINE":
CLASS USER
или
CLASS MACHINE
CATEGORY. Здесь указывается название категории. Например, такое, как "Windows Update" или "Windows Installer". Т.е. именно это название мы увидим в левой части окна групповых политик, когда будем ее искать.
Пример:
CATEGORY "My Policy"
KEYNAME. Здесь указывается имя раздела реестра, который мы будем менять. Это значение не видно из панели управления групповыми политиками. Раздел указывается вместе с путем, начиная с класса сразу после HKEY_xxx. Т.е. HKEY_LOCAL_MACHINE или HKEY_CURRENT_USER писать не надо, но все, что сразу за ними - вот это и есть.
Пример:
KEYNAME "Software\Microsoft\Office\12.0\Outlook\Preferences"
POLICY. Это имя, собственно, групповой политики. Т.е. именно то название, которое мы видим в правой части окна групповых политик. В одной категории может быть несколько политик.
POLICY "This is first policy"
VALUENAME. Это имя ключа реестра, который мы хотим менять по адресу KEYNAME. Т.е., изменяя политику, Вы будете применять значение именно к этому ключу.
VALUENAME mySoftwareParam
END POLICY и END CATEGORY будут, соответственно, закрывать набор параметров для политики и набор политик в категории.
Давайте приведем простейший пример такого файла:
CLASS USER
CATEGORY "Моя политика"
KEYNAME "Software\MySoftware\Parameters"
POLICY "Параметр 1"
VALUENAME myparam1
END POLICY
POLICY "Параметр 2"
VALUENAME myparam2
END POLICY
END CATEGORY
Вложенные категорииНа самом деле мы видим, что категории, идущие сразу с Windows, чаще всего являются вложенными. Как же нам так-же сделать?
Все просто. Вот пример, из которого уже сразу может быть все понятно:
CATEGORY "Parent"
CATEGORY "Child"
...
END CATEGORY
END CATEGORY
Т.е. мы просто делаем вложения в категории. Более сложный пример - 2 вложенные категории в родительскую:
CATEGORY "Parent"
CATEGORY "Child1"
...
END CATEGORY
CATEGORY "Child2"
...
END CATEGORY
END CATEGORY
Плейсхолдеры и строкиДавайте посмотрим на такой вариант:
CLASS USER
CATEGORY !!categoryMY
KEYNAME "Software\MySoftware\Parameters"
POLICY !!policy1
VALUENAME param1
END POLICY
POLICY !!policy2
VALUENAME param2
END POLICY
END CATEGORY
[strings]
categotyMY="Это моя категория"
policy1="Первый параметр"
policy2="Второй параметр"
Что мы здесь видим? Странные знаки !! перед значениями CATEGORY и POLICY. Такие знаки означают, что это лишь название констант строк, сами же строки находятся в специальном разделе [strings].
Итак, панель управления политиками, вместо того, чтобы писать "!!categoryHOME", будет пытаться найти константу с именем "categoryHOME" в секции "[strings]" и покажет уже значение константы "Это моя категория".
Этот прием может несколько улучшить внешний вид ADM-файла, помещяя все строки в одной части файла, а также упростить локализацию - нам ведь теперь не придется выискивать все иностранные слова по всему телу документа.
Такие "указатели" могут применяться к "объявителям" CATEGORY, POLICY, EXPLAIN и PART.
EXPLAIN (давайте объясним)Это слово используется внутри POLICY для того, чтобы вывести некий текст с объяснениями администратору, когда он открывает групповую политику (а также, администратор может прочитать это объяснение слева, между окнами с категориями и политиками, когда выбирает курсором конкретную политику).
Давайте приведем пример:
CLASS USER
CATEGORY !!categoryMY
KEYNAME "Software\MySoftware\Parameters"
POLICY !!policy1
EXPLAIN !!policyEX1
VALUENAME param1
END POLICY
POLICY !!policy2
EXPLAIN !!policyEX2
VALUENAME param2
END POLICY
END CATEGORY
[strings]
categotyMY="Это моя категория"
policy1="Параметр 1"
policy2="Параметр 2"
policyEX1="Это объяснение параметра 1"
policyEX2="Это объяснение параметра 2"
SUPPORTEDЕсли мы откроем групповую политику из набора Microsoft, то внизу можем увидеть строчку "Supported on: ...", в которой написано - какими версиями эта политика поддерживается. То же самое мы можем сделать и сами:
CLASS USER
CATEGORY !!categoryMY
KEYNAME "Software\MySoftware\Parameters"
POLICY !!policy1
SUPPORTED !!policy1s
EXPLAIN !!policyEX1
VALUENAME param1
END POLICY
POLICY !!policy2
SUPPORTED !!policy2s
EXPLAIN !!policyEX2
VALUENAME param2
END POLICY
END CATEGORY
[strings]
categotyMY="Это моя категория"
policy1="Параметр 1"
policy2="Параметр 2"
policyEX1="Это объяснение параметра 1"
policyEX2="Это объяснение параметра 2"
policy1s="Windows Server 2000, 2003, 2008"
policy2s="Windows XP, Vista, 7, Server 2003, 2008"
Выпадающие спискиЕсли заглянуть в штатные групповые политики Windows, то нередко можно увидеть выпадающие списки со значениями. Как нам такое сделать? Для этого служат сразу несколько "объявителей". Давайте начнем сразу с примера:
CLASS USER
CATEGORY !!categoryMY
KEYNAME "Software\MySoftware\Parameters"
POLICY !!policyShowWelcome
PART "Показывать приветствие" DROPDOWNLIST
VALUENAME showWelcome
ITEMLIST
NAME "Показывать" VALUE "on"
NAME "Не показывать" VALUE "off"
NAME "Только в первый раз" VALUE "onlyfirst"
END ITEMLIST
END PART
END POLICY
END CATEGORY
[strings]
categotyMY="Это моя категория"
policyShowWelcome="Показывать приветствие?"
Что же мы здесь видим нового?
PART и END PART: этими словами мы можем выделять некие контейнеры, внутри которых объявляем "выборочные" элементы. Про контейнеры будет написано ниже.
DROPDOWNLIST: указывает, что нам нужно создать выпадающий список.
ITEMLIST и END ITEMLIST: внутри этого блока мы будет объявлять все возможные значения, из которых администратор сможет выбрать необходимое ему.
NAME xxx VALUE xxx: После NAME, в кавычках, пишем "человеческое" название значения. После VALUE - какое значение присвоить в реестре параметру VALUENAME.
Задаем свои значения "включено" и "выключено"По-умолчанию, если мы не определим отдельно значения для "включено" - Windows будет записывать DWORD-параметр в реестр со значением "1" для включено и удалять параметр VALUENAME (весь, целиком) когда политика становится "выключенной".
Например, включили политику - появился параметр param в реестре типа DWORD со значением "1".
Выключили - параметр param исчез.
Для того, чтобы определить свои значения - существует ключ "VALUE":
KEYNAME "key"
VALUENAME "param"
VALUE "on"
Видим, что здесь вместо "1" будет записано значение "on" типа REG_SZ в то время, когда политика включена. Но по-прежнему ключ "param" будет просто удален, если политика выключена.
KEYNAME "key"
VALUENAME "param"
VALUE NUMERIC 5
А здесь при включении политики будет записано число 5 типа DWORD.
Теперь представим ситуацию, когда нам нужно, чтобы параметр сохранялся всегда. Т.е. чтобы он не удалялся при выключении политики, а переходил в другое состояние - принимал другое значение. Для этого служат слова "VALUEON" и "VALUEOFF":
KEYNAME "key"
VALUENAME "param"
VALUEON "enabled"
VALUEOFF "disabled"
Так-же существует специальное значение параметра "DELETE". Например, представим обратную ситуацию: когда политика включена - нам нужно, чтобы параметра в реестре не было, а когда выключена - чтобы он появлялся:
KEYNAME "key"
VALUENAME "param"
VALUEON DELETE
VALUEOFF "disabled"
Изменение сразу нескольких ключей реестраПредставим ситуацию: при включении или выключении политики нам нужно изменить сразу несколько ключей реестра (что бывает нередко). Для этого служат слова ACTIONLISTON и ACTIONLISTOFF:
KEYNAME "key"
VALUENAME "param"
ACTIONLISTON
VALUENAME "param1" VALUE "enabled"
VALUENAME "param2" VALUE "second on"
VALUENAME "param3" VALUE NUMERIC 5
END ACTIONLISTON
ACTIONLISTOFF
VALUENAME "param1" DELETE
VALUENAME "param2" VALUE "second off"
VALUENAME "param3" VALUE NUMERIC 0
END ACTIONLISTOFF
Из примера видно, что листы срабатывают аналогично VALUEON и VALUEOFF. Внутри листов указываются наборы ключей реестра и значения, в которые эти ключи нужно поставить.
Контейнеры PART и другие типы селекторовВыше мы научились создавать групповые политики. Однако все, что мы на текущий момент сделали - это научились создавать политики с выбором "включено/выключено" и, как частный случай - с выпадающим списком. Однако в политиках от Microsoft мы видим, что можно также делать различные селекторы с галочками выбора, можно вводить текст, а не выбирать из предложенных вариантов и т.д.
Для организации этих возможностей служит "объявитель" PART. Вместе с ним используется некоторые слова-уточнители, которые показывают панели управления групповой политики - что именно мы хотим получить.
Структура PART одинакова и схожа с другими блоками групповых политик. Начинается блок со слова "PART", внутри которого идет какое-то название или титл параметра, далее идет описание селектора параметра. И последний штрих - это закрывающий тег "END PART".
Давайте разберем различные "селекторы".
TEXT
Все, что делает этот контейнер - это показывает текст. В нем нельзя что-то выбрать или изменить - это просто текстовая сноска для администратора, может быть, с какой-то информацией или объяснением смысла следующих параметров.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Это просто текстовое объяснение чего-то" TEXT
END PART
END POLICY
...
EDITTEXT
Этот селектор позволяет вводить произвольный набор символов (текстовую строку), который будет сохранен как значение переменной реестра. Длинна вводимого текста не может превышать 255 символов.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Введите адрес" EDITTEXT REQUIRED
VALUENAME address
END PART
END POLICY
...
В этом примере введенный администратором текст сохранится в параметре address ключа реестра "Software\MySoft\Params".
Здесь так-же использовано слово REQUIRED, которое означает, что текстовое поле не может быть пустым.
Кроме того, Вы можете использовать параметр DEFAULT, чтобы задать значение по-умолчанию:
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Введите адрес" EDITTEXT REQUIRED DEFAULT "какой-то адрес"
VALUENAME address
END PART
END POLICY
...
Если указать ключ MAXLEN, то длинна вводимого текста будет ограничена значением, которое Вы укажите сразу за MAXLEN:
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Введите адрес" EDITTEXT MAXLEN 50
VALUENAME address
END PART
END POLICY
...
А при указании ключа EXPANDABLETEXT введенное значение будет сохранено в реестре с типов REG_EXPAND_SZ.
DROPDOWNLIST
Об этом селекторе мы уже говорили выше. Он позволяет создать выпадающий список с предопределенными значениями.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
VALUENAME param
PART "Выберите значение" DROPDOWNLIST
ITEMLIST
NAME "Первый вариант" VALUE "first"
NAME "Второй вариант" VALUE "second"
NAME "Третий вариант" VALUE "third"
END ITEMLIST
END PART
END POLICY
...
В списке ITEMLIST мы задаем набор "название" = "значение". Название будет отображено в выпадающем списке для администратора. Значение будет установлено в реестре для указанного в VALUENAME параметра.
Мы также можем использовать дополнительно слово NOSORT для того, чтобы запретить панели управления групповыми политиками автоматически сортировать в алфавитном порядке названия селектора.
NUMERIC
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Введите число" NUMERIC REQUIRED SPIN 10
VALUENAME "MaxProfileSize"
DEFAULT 1000
MAX 10000
MIN 100
END PART
END POLICY
...
Как видно из названия - позволяет вводить только числа. При этом предоставляет кнопки "больше"-"меньше".
Параметр SPIN отвечает за шаг прибавления при нажатии на него.
DEFAULT - указывает значение по-умолчанию.
MAX и MIN - соответственно, максимальное и минимальное значения.
Если указать модификатор TXTCONVERT, то вместо того, чтобы записать число в DWORD, оно будет преобразовано в строку и записано как REG_SZ.
CHECKBOX
Славная добрая "галочка". Выбор включено/выключено.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Включим это?" CHECKBOX
VALUENAME doWeEnable
VALUEON NUMERIC 1
VALUEOFF NUMERIC 0
END PART
END POLICY
...
Естественно, можно не использовать VALUEON/VALUEOFF, можно использовать слово DELETE и т.д., т.е. все, что говорилось выше.
Если указать слово DEFCHECKED, то селектор будет по-умолчанию включенным (выбранным).
COMBOBOX
Отличается от DROPDOWNLIST тем, что в нем администратор может не только выбрать из выпадающего списка какое-то значение, но и ввести что-то свое.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Выберите или введите свое:" COMBOBOX
VALUENAME param
SUGGESTIONS
"alpha" "beta" "gamma" "another" "еще что-то"
END SUGGESTIONS
END PART
END POLICY
...
Как видно, мы даем администратору на выбор значения из списка SUGGESTIONS, однако не запрещаем ему вводить что-то свое.
Мы так-же можем использовать модификаторы NOSORT, MAXLEN и DEFAULT здесь.
LISTBOX
Самый, наверное, необычный вид селектора. Он не позволяет задать у себя VALUENAME или VALUE. Все, что он делает - это показывает кнопку "Show" ("Показать"), нажав на которую администратор может видеть все параметры из заданного ключа реестра.
...
POLICY "My Policy"
KEYNAME "Software\Mysoft\Params"
PART "Параметры:" LISTBOX
END PART
END POLICY
...
Мы можем использовать модификатор EXPLICITVALUE для того, чтобы список параметров сопровождался списком значений этих параметров.
Как импортировать свой файл ADM в оснасткуКак мы уже говорили выше - файл необходимо сохранить с расширением .adm. Путь используйте: c:\windows\inf
Теперь откройте оснастку групповых политик (неважно - это GPMC или gpedit.msc) и нажмите правой кнопкой мыши на "computer settings" или "user settings" ("Конфигурация компьютера" или "Конфигурация пользователя") на пункте "Administrative templates" ("Административные шаблоны"). У вас должно появиться контектстное меню, одним из пунктов которого будет "Add/Remove administrative templates" ("Добавление и удаление шаблонов").
Выберите этот пункт. У Вас откроется окно, через которое Вы можете "обозреть" файлы групповых политик. Найдите свой и нажмите на "открыть" (Open). Если Вы правильно оформили свой файл - он без сучка и задоринки должен будет импортироваться в оснастку, а в панели категорий Вы увидите свои групповые политики.
Если я все-равно не вижу свои политики (но вижу свою категорию)Походу, Вы сделали не политику, а "настройку". Они отличаются от политик тем, что необратимы (т.е. если Вы выключаете политику - значения реестра возвращаются в состояние, как если бы политику и не включали вовсе; если выключаете "настройку" - то значения в реестре меняются на что-то, но не становятся такими, как до включения... простой пример - использование VALUEOFF для задания значений для выключения политики).
По-умолчанию такие "настройки" скрыты от глаз администраторов. Чтобы их увидеть - ткните правой кнопкой мыши в свою категорию в панели управления групповыми политиками и выберите пункт "View-->Filtering" ("Вид-->Фильтры") и снимите галочки в открывшемся окне с обоих параметров, названия которых начинаются на "Only show..." ("Показывать только...").
Комментарии
Оставить комментарий
Операционные системы и системное программировние
Термины: Операционные системы и системное программировние