Наличие механизма групповых политик всегда являлась одной из главных отличительных черт Active Directory (AD), а в операционной системе Windows Server 2003 компания Microsoft существенно расширила функциональность объектов групповой политики (GPO) и возможность управления им, дополнив консоль MMC оснасткой Group Policy Management Console (GPMC). Компонент GPMC является довольно масштабным и достаточно сложным инструментом, поэтому для того, чтобы научиться максимально использовать все преимущества GPO в своей инфраструктуре необходимо хорошо разбираться в предмете. Чтобы получить базовые знания по GPMC, рекомендую вам прочитать статью Microsoft "Enterprise Management with the Group Policy Management Console" (http://www.microsoft.com/windowsserver2003/gpmc), а также познакомиться со справочником по GPMC Group Policy Management Console Reference на Web-сайте Microsoft http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gpmc/gpmc/group_policy_management_console_reference.asp. Отсюда же можно загрузить и саму эту оснастку.

С выходом Windows 2003 перед нами открылись новые возможности по использованию сценариев, в том числе и для автоматизации работы с GPMC. В результате теперь из сценариев можно обращаться к объектам GPO и решать типовые задачи администрирования, связанные с применением механизмов политик. Давайте познакомимся с основными операциями с GPO, которые можно автоматизировать в GPMC. К ним относятся включение и отключение GPO , связывание и отмена GPO для сайта, домена или организационного подразделения (OU), а также настройка других параметров политики.

Что такое GPO

Технология администрирования, построенная на основе политик, дает администратору возможность сначала детально настроить параметры рабочей среды для пользователей и компьютеров, а затем, в зависимости от системы, принудительно поддерживать данное состояние. В сетях Windows NT реализовать подобную среду с жестко заданными параметрами было довольно затруднительно, но с появлением AD и механизмов групповых политик процесс настройки параметров администрирования упростился, а сами возможности администрирования существенно расширились. Теперь администратор может разделять пользователей по категориям, основываясь на своей собственной классификации, в соответствии с ролями пользователей и выполняемыми ими работами. В результате, при каждом включении нового пользователя в ту или иную группу AD ему, в зависимости от его роли, автоматически будет назначена соответствующий набор параметров, а также установлено необходимое программное обеспечение. Каждый объект GPO может состоять из двух частей, одна из которых относится к компьютеру (например, сценарий регистрации или изменение системных разделов реестра), а другая - к пользователю (в частности, сценарий завершения сеанса или модификация пользовательских разделов реестра). В принципе объект GPO может содержать только пользовательские политики, только политики для компьютеров, либо сочетать в себе оба типа политик.

Процесс создания GPO является автономным. Затем, с помощью процесса, называемого связыванием (linking), он ассоциируется с одним или несколькими структурными компонентами дерева AD (ими могут быть отдельные компьютеры, сайты, домены или OU), к которым нужно применить данную политику. Для редактирования GPO обычно применяется оснастка Group Policy Object Editor, более известная как Group Policy Editor (GPE). Однако через Group Policy Object Editor в одном сеансе можно управлять не более чем одним GPO. Для преодоления этого ограничения компания Microsoft разработала компонент GPMC.

Имея в своем распоряжении GPMC можно через единственный интерфейс выполнять практически все действия с GPO (включая редактирование GPO с помощью Group Policy Object Editor) - в Windows 2000 для этого требовалось три или четыре инструментальных средства. При установке GPMC также создаются несколько специальных COM-объектов, наличие которых позволяет выполнять до 90 процентов работ по управлению GPO с помощью сценариев. При этом также развертывается каталог, в котором содержится большое количество готовых примеров сценариев, реализующих многие типичные задачи администрирования. Здесь следует упомянуть еще одну функциональность, которую мы долго ждали, а именно, возможность полученя результирующиго набора политик - Resultant Set of Policies (RSoP). RSoP позволяет моделировать и тестировать поведение GPO. Используя RSoP можно настраивать различные параметры. Например, можно указать, какой контейнер следует обрабатывать, какие должны быть задействованы группы безопасности, нужно ли использовать какой-либо сайт, задействовать ли режим петли (loopback mode) и нужно ли применять фильтр Windows Management Instrumentation (WMI). В конечном итоге при работе с RSoP будет получен тот же результат, что и при использовании Group Policy Object Editor - вы сможете в масштабах всего дерева увидеть те настройки, которые будут применены к клиентам через данный GPO.

С помощью GPMC можно управлять как доменами Windows 2003, так и доменами Windows 2000. Но при этом сама консоль GPMC должна запускаться только на компьютерах с установленной Windows 2003 или Windows XP Professional Edition Service Pack 2 (SP1 или SP2), на которых также должны быть установлены Windows .NET Framework. В принципе эта программа может быть установлена на компьютер, не являющийся членом домена, но такой подход практически не применяется, поскольку установка GPMC на компьютер, входящий в состав домена обеспечивает более эффективное использование данного инструмента.

Работа с GPMC через сценарии

Когда мы будем рассматривать примеры конкретных сценариев, помните о том, что хотя объекты GPMC и позволяют выполнять из сценариев те операции, которые при использовании GPMC являются потенциально опасными, однако они не позволяют создавать GPO из сценариев. Для того чтобы создавать объекты GPO необходимо использовать Group Policy Object Editor, но не GPMC. При создании GPO его компоненты, относящиеся к пользователям и компьютерам, по умолчанию включены, и вы можете использовать GPMC для того чтобы отключить любой из них или оба сразу. Сценарий DisableAll.vbs, приведенный в Листинге 1, является простым примером того, как можно отключить оба этих компонента GPO в масштабах домена. В начале сценария вызывается функция VBScript CreateObject, посредством которой создается объект автоматизации GPMC. Данный объект ссылается на переменную gpm. Далее с помощью метода IGPM::GetDomain выполняется обработка для домена mydomain.mycorp.com.

Метод IGPM::GetDomain имеет три параметра. Первый из них определяет домен, второй параметр является дополнительным и позволяет задать имя требуемого контроллера домена (DC), а с помощью третьего параметра можно указать какой именно контролер домена используется: Windows 2003 или Windows 2000. В рассматриваемом примере второй параметр является пустым, а третий параметр имеет значение 0. Данная комбинация параметров предписывает сценарию подключиться к компьютеру, исполняющему роль мастера PDC. Вместо того чтобы жестко задавать в сценарии имя DC (который может оказаться недоступным при запуске сценария), предпочтительнее указать роль мастера PDC. При этом будет выполнена привязка к тому DC, который с наибольшей вероятностью доступен в любое время. В результате AD находит тот контроллер домена, который был выбран на роль эмулятора PDC (или тот DC, который был назначен администратором), таким образом выбирается один из компьютеров, реализующих роль мастера, чем обеспечивается эмуляция PDC для поддержки доменов NT предыдущих версий.

После того как сценарий выполнит операцию подключения к домену, вызывается метод IGPMDomain::GetGPO, который возвращает соответствующий объект GPO и его параметры. Для того чтобы идентифицировать требуемый GPO сценарий использует соответствующий данному объекту глобальный идентификатор GUID. Поскольку мы пытаемся автоматизировать процедуру отключения компонентов GPO, желательно знать, каким объектом мы собираемся манипулировать (вместо того чтобы внедрять в сценарий соответствующие процедуры поиска необходимого GUID). короче говоря, проблема состоит в том, чтобы выяснить, к какому именно GUID нужно обращаться. К счастью один из примеров сценариев, имеющихся в GPMC, а именно listallgpos.wsf, позволяет получить имена и GUID всех объектов GPO в домене. Таким образом, после того как сценарий подключается к интересующему GPO, он обращается к свойству IGPMGPO::IsUserEnabled и определяет, активен ли пользовательский компонент данного объекта. Если да, то в этом случае для отключения данного компонента используется метод IGPMGPO::SetUserEnabled путем передачи значения FALSE. Затем аналогичным образом сценарий выполняет проверку и отключение компонента GPO, относящегося к компьютерам. Если требуется отключить только пользовательский или только компьютерный компонент GPO, то следует соответствующим образом отредактировать текст сценария Листинга 1. Также можно модифицировать сценарий для включения определенного компонента. Для этого можно отредактировать основные строки, например, так:

If Not gpmGPO.IsUserEnabled Then
gpmGPO.SetUserEnabled TRUE
End If

Связывание GPO со структурными компонентами дерева AD

Как отмечалось выше, GPO будет применяться только тогда, когда они привязаны к соответствующим локальным компьютерам, сайтам, доменам или OU. Для того чтобы привязать GPO к дереву AD, необходимо указать тот структурный компонент (location), которым мы собираемся управлять - в терминах GPMC это называют областью управления (scope of management (SOM)). Так как в Windows 2003 и Windows 2000 политики GPO применяются в соответствии с последовательностью их следования, то, при необходимости, можно привязывать GPO к SOM, учитывая порядок следования. Например, мы можем назначить GPO 4 позициям из 7. Затем, если по данной позиции уже существует связь с другим объектом GPO, данный метод устанавливает новую связь, размещая ее первой в списке, при этом существующая связь и все следующие за ней перемещаются в списке связей на одну строку вниз.

Допустим, нам нужно привязать какой-либо GPO к некоторому OU в домене, при этом и GPO, и OU нам известны. На Листинге 2 показан пример того, как можно привязать GPO к OU. Здесь, как и в примере Листинга 1, сценарий в начале получает описатели домена и GPO. Затем при помощи метода IGPMDomain::GetSOM находится объект SOM. Для того чтобы связать GPO с определенным OU, сценарий должен передать данному OU полностью полное имя домена (Fully Qualified Domain Name, FQDN). После того как сценарий выполнил подключение к необходимому SOM, можно привязать к этому SOM соответствующий объект GPO. Для этого используется метод IGPMSOM::CreateGPOLink. Первый параметр этого метода указывает в списке GPO позицию той политики, которая должна быть применена к данному SOM. Второй параметр представляет собой полученный ранее описатель GPO.

В примере Листинга 2 в качестве первого параметра метода используется значение -1, что указывает на то, что данный GPO должен быть добавлен в конец перечня GPO, используемого Windows 2003 и Windows 2000 для определения порядка применения политик. Учтите, что при добавлении GPO в определенную позицию списка следует быть аккуратным, поскольку если указанное число превышает количество строк в текущем списке GPO, то это приводит к сбою работы метода. Поэтому я рекомендую проверять количество элементов в списке. Для этого сначала используется метод IGPMSOM::GetGPOLink, возвращающий объект GPOLinksCollection, а затем, обратившись к свойству IGPMGPOLinksCollection::Count данного объекта, можно определить количество элементов в списке GPO.

Для того чтобы привязать GPO ко всему домену, а не к отдельному OU, используется вызов метода IGPMDomain::GetSOM с пустой строкой:

Set gpmSOM = gpmDomain.GetSOM ("")

Привязка политик к сайтам реализуется так же просто, как и в случае доменов. На Листинге 3 показан измененный вариант сценария Листинга 2, предназначенный для связывания GPO с сайтами. В данном сценарии, как и в примере Листинга 2, сначала находится описатель домена, для того чтобы можно было сформировать связь с заданным GPO. Однако далее, для получения доступа к значениям ключевых констант, сценарий использует совершенно новый интерфейс, называемый IGPM::GetConstants. В результате в сценарии не требуется использовать строки Const для объявления той или иной константы GPMC, поскольку мы можем получать эти константы динамически, в ходе выполнения сценария. Если в дальнейшем Microsoft решит изменить значения некоторых из этих констант, то использование метода IGPM::GetConstants гарантирует некоторую степень унификации для наших сценариев. После этого вызывается метод IGPM::GetSitesContainer, возвращающий описатель объекта GPMSitesContainer, что дает сценарию возможность установить соединение с конкретным сайтом. Данный метод имеет четыре параметра. Первый из них это полное имя DNS корневого домена леса, в котором находится интересующий нас сайт. В качестве второго параметра используется пустая строка, что указывает на то, что никакой конкретный домен не выбран. В результате сценарий будет использовать имя главного контроллера (PDC) корневого домена леса. Если необходимо указать какой-то конкретный домен, тогда следует использовать DNS-имя этого домена. В качестве третьего параметра также используется пустая строка, предписывающая методу использовать корневой PDC леса, вместо того, чтобы выполнять поиск NetBIOS- или DNS-имени заданного контроллера домена. В качестве четвертого параметра передается константа IGPMConstants::UseAnyDC, что предписывает сценарию использовать в качестве DC владельца роли мастера PDC. Если в третьем параметре указывается конкретный DC, тогда четвертому параметру следует присвоить значение 0. Далее сценарий находит описатель SOM для соответствующего сайта, для чего используется метод IGPMSitesContainer::GetSite. При этом методу передается единственный параметр - имя сайта. Последний шаг - привязка GPO к сайту - реализуется так же, как это делалось в сценарии в Листинге 2. Однако в данном случае эта процедура является несколько более затяжной, поскольку здесь выполняется подключение как к объекту GPMDomain для того чтобы получить описатель GPO, так и к объекту GPMSitesContainer для выполнения процедуры связывания.

Что дальше?

В данной статье мы коснулись лишь основ тех возможностей, которые открывает нам GPMC. В принципе, аналогичным образом можно автоматизировать большое количество процедур, связанных с манипуляциями с объектами GPO. Здесь мы рассмотрели сценарии, предназначенные для отключения GPO и привязки GPO к OU, доменам и сайтам, но помимо них в GPMC имеется значительное количество примеров сценариев для решения различных задач администрирования, которые могут послужить вам хорошей отправной точкой.


Листинг 1. DisableAll.vbs
Const GUID = "INSERT GPO GUID HERE"
Const DOMAIN = "mydomain.mycorp.com"
Dim gpm, gpmDomain, gpmGPO
Set gpm = CreateObject("GPMGMT.GPM")
Set gpmDomain = gpm.GetDomain (DOMAIN, "", 0)
Set gpmGPO = gpmDomain.GetGPO (GUID)
If gpmGPO.IsUserEnabled Then
	gpmGPO.SetUserEnabled FALSE
End If
If gpmGPO.IsComputerEnabled Then
	gpmGPO.SetComputerEnabled FALSE
End If

Листинг 2. LinkGPOToOU.vbs
Const GUID = "INSERT GPO GUID HERE"
Const DOMAIN = "mydomain.mycorp.com"
Const OU = "ou=Finance,dc=mydomain,dc=mycorp,dc=com"
Dim gpm, gpmDomain, gpmGPO, gpmSOM, gpmGPOLink
Set gpm = CreateObject("GPMGMT.GPM")
Set gpmDomain = gpm.GetDomain (DOMAIN, "", 0)
Set gpmGPO = gpmDomain.GetGPO (GUID)
Set gpmSOM = gpmDomain.GetSOM (OU)
Set gpmGPOLink = gpmSOM.CreateGPOLink(-1, gpmGPO)

Листинг 3. LinkGPOToSite.vbs
Const SITENAME = "Name-of-the-site-to-connect-to"
Const GUID = "INSERT GPO GUID HERE"
Const DOMAIN = "mydomain.mycorp.com"
Const FOREST_ROOT_DOMAIN = "mycorp.com"
Dim gpm, gpmDomain, gpmGPO, gpmConstants
Dim gpmSites, gpmSOM, gpmGPOLink
Set gpm = CreateObject("GPMGMT.GPM")
Set gpmDomain = gpm.GetDomain (DOMAIN, "", 0)
Set gpmGPO = gpmDomain.GetGPO (GUID)
Set gpmConstants = gpm.GetConstants
Set gpmSites = gpm.GetSitesContainer(FOREST_ROOT_DOMAIN,"","",gpmConstants.UseAnyDC)
Set gpmSOM = gpmSites.GetSite (SITENAME)
Set gpmGPOLink = gpmSOM.CreateGPOLink(-1, gpmGPO)