Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Создаем свои групповые политики для Windows Server 2003

Практика



Итак, у нас есть задача - создать свой набор свойств для групповой политики. Так называемый 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..." ("Показывать только...").
создано: 2017-05-10
обновлено: 2021-03-13
133139



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционные системы и системное программировние

Термины: Операционные системы и системное программировние