главная    •     Новости      •     софт      •     RSS-ленты     •     реклама      •     PDA-Версия      •    Контакты
Windows XP    •      Windows 7     •    Windows 8    •    Windows 9-10-11     •    Windows Server     •    Железо
Советы      •     Администрирование      •     Сеть      •     Безопасность      •     Статьи      •     Материалы
Реклама на сайте
Книга жалоб и предложений
Правила на сайте
О Winblog.ru и о копирайте
Написать в редакцию
Конфиденциальность
                       
  • Microsoft Edge - еще более безопасный!
  • ActiveCloud - надежный провайдер облачных услуг для вашей компании
  • ANYSERVER - ваш поставщик б/у серверов из Европы
  • Настройка контекстной рекламы в Yandex и Google: Эффективный путь к росту вашего бизнеса
  • Коммутаторы с функцией PoE: Обеспечение эффективной передачи данных и питания
  • Очередное обновление сломало выключатель компьютеров на Windows 11
  • Практика мониторинга AD с использованием WMI
    В предлагаемой статье я расскажу о том, как использовать провайдеры WMI для мониторинга изменений пяти ролей контроллеров AD таким образом, чтобы администраторы получали уведомления при перемещении ролей FSMO с одного сервера на другой.

    Получение информации о роли FSMO
    Для обеспечения надежной работы сложных сетей архитекторами Windows было предусмотрено пять ролей, которые могут принять на себя один или несколько контроллеров домена AD. Логика и техника кодирования для мониторинга FSMO сходна с той, что использовалась для мониторинга групп AD; отличие заключается в том, что получить информацию о FSMO не так просто, как о группах AD. Для получения сведений о ролях FSMO необходимо опросить три контекста именования AD, а для этого требуется выполнить настройку WMI на уровне пространства имен root\directory\LDAP. Провайдер AD получает сведения из контекста именования по умолчанию, то есть контекста именования домена Windows, в котором размещен опрашиваемый контроллер домена. Вместе с тем, атрибуты, содержащие сведения о FSMO, распределены между тремя контекстами именования AD, так что для мониторинга всех трех ролей FSMO необходимо также обратиться к контекстам именования конфигурации и схемы.

    В приведенной ниже таблице 1 перечислены роли FSMO, их размещение в контекстах именования и другая важная информация. Роли FSMO хранятся в различных классах объектов AD, WMI-формы которых приведены в столбце WMI Class таблицы 1. Роль FSMO всегда хранится в атрибуте fSMORoleOwner, которому соответствует свойство с названием ds_fSMORoleOwner. Для администраторов, предпочитающих применять ADSI (Active Directory Service Interfaces) вместо WMI, в статье TechNet (http://www.microsoft.com/technet/community...mt/scrcm24.mspx) представлен сценарий, иллюстрирующий использование ADSI для получения информации о ролях FSMO путем выполнения запроса к объектам LDAP, перечисленным в столбце «Имя DN» объекта AD в таблице 1. Приведенный в TechNet сценарий сначала определяет мастера схемы FSMO, затем мастера именования домена (Domain Naming Master), эмулятор PDC, затем мастера RID и, наконец, мастера инфраструктуры. При внимательном анализе кода сценария можно заметить, что все роли FSMO хранятся в атрибуте fSMORoleOwner, содержащем отличительное имя (DN) контроллера домена, выполняющего эти роли. Отличительное имя DN изменяется, когда кто-то передает роль FSMO другому контроллеру домена. Таким образом, для мониторинга изменения ролей FSMO достаточно отслеживать изменения DN, хранящиеся в атрибуте FSMORoleOwner. Вы можете получить ту же информацию, которую получает предлагаемый в TechNet сценарий, использующий для этого WMI. Таким образом, задача сводится к тому, чтобы получить доступ к контекстам именования конфигурации и схемы, которые содержат, соответственно, роль мастера именования домена (т.е. объект LDAP crossRefContainer) и роль мастера схемы Schema Master (объект LDAP dMD).

    Чтобы с помощью WMI разрешить доступ к объекту LDAP crossRefContainer в контексте именования конфигурации и к объекту dMD LDAP в NC схемы, необходимо сначала создать в пространстве имен root\directory\LDAP экземпляры классов WMI DN_Class и DSClass_To_DNInstance. Класс DN_Class инкапсулирует DN контекста именования, который поддерживает роль FSMO. Класс DSClass_To_DNInstance ассоциируется с классом WMI, представляющим объект, который требуется найти в контексте именования AD с помощью экземпляра этого контекста.

    Можно создать экземпляры этих классов, используя формат управляемых объектов MOF (Managed Object Format – встроенный формат файлов WMI для описания классов, экземпляров классов в репозитарии WMI). Пример такого файла MOF представлен в листинге 1. Как видно из фрагмента A, для обнаружения (доступа) к экземпляру WMI ds_crossRefContainer в контексте именования конфигурации, необходимо сначала создать экземпляр класса DN_Class, определяющий контекст именования, затем создать экземпляр класса DSClass_To_DNInstance и определить его свойства следующим образом:

    - свойство DSClass представляет собой имя экземпляра класса ds_crossRefContainer
    - свойство RootDNForSearchAndQuery представляет собой присвоенный путь WMI экземпляра WMI, представляющего NC конфигурации. Экземпляр, представляюший NC конфигурации создается на основе только что описанного класса DN_Class
    Как видно из листинга 1, фрагмент B, для создания и инициализации файла MOF используется тот же процесс, что и для класса ds_dMD, экземпляр которого содержится в контексте именования схемы AD.

    Чтобы выполнить мониторинг ролей FSMO, необходимо загрузить файл MOF в репозитарий Common Information Model (CIM) – это можно сделать с помощью утилиты WMI MofComp. MofComp выполняет синтаксический разбор содержащихся в файле MOF предложений и добавляет эти классы и экземпляры классов в репозитарий CIM. Для загрузки в репозитарий CIM кода, представленного в листинге 1, нужно выполнить следующую команду

    MofComp ForestFSMO.mof


    Обратите внимание, что при этом не требуется указывать в командной строке пространство имен WMI root\directory\LDAP для загрузки содержащихся в файле MOF описаний в нужное место репозитария CIM. Файл MOF явным образом определяет пространство имен в предложении #pragma namespace, так что указывать пространство имен в командной строке не требуется.

    Я разработал сценарий мониторинга ролей FSMO, FSMOMonitor.wsf. В Листинге 2 представлены фрагменты сценария FSMOMonitor.wsf, в которых реализована логика мониторинга ролей FSMO в домене AD. Логика и структура кода, осуществляющего мониторинг, подобны тем, которые применялись для мониторинга групп, поэтому вместо повторения всех аспектов работы сценария здесь будут рассматриваться в основном различия в подходах.

    Одним из основных отличий является число запросов событий, которые выдает сценарий. Вместо единственного запроса, который позволял получить всю необходимую информацию о группах, в сценарии FSMOMonitor.wsf выполняется пять запросов событий WQL для каждой из ролей FSMO. Все используемые запросы WQL имеют одинаковую структуру. Для обнаружения изменений, характеризующих смену роли FSMO, которые могут произойти с исследуемым объектом AD, запрос WQL сравнивает свойство текущего экземпляра объекта TargetInstance.DS_fSMORoleOwner с предыдущим сохраненным значением PreviousInstance.DS_fSMORoleOwner. Ниже приводится пять запросов WQL, которые используются для обнаружения смены ролей FSMO.

    Роль PDC Emulator FSMO:
    Select * From __InstanceModificationEvent Within 10 Where TargetInstance ISA 'ds_domaindns' And PreviousInstance.DS_fSMORoleOwner <> TargetInstance.DS_fSMORoleOwner"

    Роль Infrastructure Master FSMO:
    Select * From __InstanceModificationEvent Within 10 Where TargetInstance ISA 'ds_infrastructureupdate' And PreviousInstance.DS_fSMORoleOwner <> TargetInstance.DS_fSMORoleOwner"

    Роль RID Master FSMO:
    Select * From __InstanceModificationEvent Within 10 Where TargetInstance ISA 'ds_ridmanager' And PreviousInstance.DS_fSMORoleOwner <> TargetInstance.DS_fSMORoleOwner"

    Роль Domain Naming Master FSMO:
    Select * From __InstanceModificationEvent Within 10 Where TargetInstance ISA 'ds_crossrefcontainer' And PreviousInstance.DS_fSMORoleOwner <> TargetInstance.DS_fSMORoleOwner"

    Роль Schema Master FSMO:
    Select * From __InstanceModificationEvent Within 10 Where TargetInstance ISA 'ds_dmd' And PreviousInstance.DS_fSMORoleOwner <> TargetInstance.DS_fSMORoleOwner"

    После установки соединения WMI сценарий выполняет пять запросов событий WQL, которые представлены во фрагменте B листинга 2. Обратите внимание, что каждый из запросов использует объект контекста WMI, поскольку для обнаружения всех событий WMI применяется одна и та же процедура. Контекст сохраняется в созданных ранее объектах SWbemNamedValueSet, для каждой из пяти ролей FSMO создается собственный объект. Более подробные сведения об объекте SWbemNamedValueSet содержатся в статье базы знаний Microsoft MSDN, которую можно найти по ссылке msdn.microsoft.com/.... Перед выполнением запросов событий WQL в сценарии выполняется инициализация объектов SWbemNamedValueSet соответствующими ролям FSMO значениями. Процедура обработки событий WMI почти аналогична процедуре обработки изменений групп AD, за исключением того, что сначала для определения, к какой из рассматриваемых ролей FSMO относится событие, выполняется определение контекста WMI – этому в листинге 2 соответствует фрагмент кода С. Далее сценарий выводит сообщение о том, с которой из ролей FSMO произошли изменения.

    От слов к делу
    В этой статье было показано, как можно использовать три новых провайдера WMI для мониторинга AD и решения задач системного администрирования. Возможно, Microsoft добавит средства непосредственного мониторинга AD в будущих выпусках операционных систем, но на сегодня провайдеры WMI AD являются единственным способом решения этой задачи. Точно так же можно отслеживать создание и удаление учетных записей пользователей. С помощью этих технологий мониторинга AD можно, например, настроить среду Microsoft Exchange Server с двумя лесами таким образом, что в одном из лесов выполняется регистрация учетных записей пользователей, а в другом для зарегистрированного пользователя автоматически создается почтовый ящик. Далее можно настроить взаимодействие таким образом, чтобы при удалении пользовательской учетной записи в исходном лесу выполнялось автоматическое удаление почтового ящика. Эта задача потребует написания дополнительных сценариев WMI и ADSI, но рассмотренные сценарии мониторинга обеспечивают достаточную основу для разработки подобных административных сценариев.

    Листинг 1. ForestFSMO.mof
    #pragma namespace("\\\\.\\Root\\directory\\ldap")
    BEGIN CALLOUT A
    Instance of DN_Class
        {
        DN = "LDAP://CN=Configuration,DC= LissWare,DC=Net";
        };
    Instance of DSClass_To_DNInstance
        {
        DSClass = "ds_crossRefContainer";
        RootDNForSearchAndQuery =
              "DN_Class.DN=\"LDAP://CN=Configuration,DC= LissWare,DC=Net\"";
        };
    END CALLOUT A
    BEGIN CALLOUT B
    Instance of DN_Class
       {
       DN = "LDAP://CN=Schema,CN=Configuration,DC= LissWare,DC=Net";
        };
    Instance of DSClass_To_DNInstance
       {
       DSClass = "ds_dMD";
       RootDNForSearchAndQuery =
             "DN_Class.DN=\"LDAP://CN=Schema,CN=Configuration,DC=LissWare,DC=Net\"";
       };
    END CALLOUT B
    Листинг 2. Извлечение из FSMOMonitor.wsf
    <?xml version="1.0"?>
    <package>
      <job>
    BEGIN CALLOUT A
        <object progid="WbemScripting.SWbemLocator" id="objWMILocator"
                                     reference="true"/>
        <object progid="WbemScripting.SWbemNamedValueSet"
                                     id="objPDCFSMOSinkContext"/>
        <object progid="WbemScripting.SWbemNamedValueSet"
                                     id="objINFFSMOSinkContext"/>
        <object progid="WbemScripting.SWbemNamedValueSet"
                                     id="objRIDFSMOSinkContext"/>
        <object progid="WbemScripting.SWbemNamedValueSet"
                                     id="objDOMFSMOSinkContext"/>
        <object progid="WbemScripting.SWbemNamedValueSet"
                                     id="objSCHFSMOSinkContext"/>
        <object progid="WbemScripting.SWbemDateTime"
                                     id="objWMIDateTime" />
    END CALLOUT A
        <script language="VBscript">
        <![CDATA[
    .
    .
    .
        Const cTargetRecipient = "Alain.Lissoir@LissWare.Net"
        Const cSourceRecipient = "WMISystem@LissWare.Net"
    .
    .
    .
        Set objWMISink = WScript.CreateObject ("WbemScripting.SWbemSink", "SINK_")
        objWMILocator.Security_.AuthenticationLevel = _
          wbemAuthenticationLevelDefault
        objWMILocator.Security_.ImpersonationLevel = _
          wbemImpersonationLevelImpersonate
        Set objWMIServices = objWMILocator.ConnectServer(strComputerName, _
          cWMINameSpace, strUserID, strPassword)
        If Err.Number Then ErrorHandler (Err)
    BEGIN CALLOUT B
        objPDCFSMOSinkContext.Add "FSMO", "PDC"
        objWMIServices.ExecNotificationQueryAsync objWMISink, _
                                                  cPDCFSMOWMIQuery, _
                                                  , _
                                                  , _
                                                  , _
                                                  objPDCFSMOSinkContext
        If Err.Number Then ErrorHandler (Err)
        WScript.Echo "Monitoring PDC FSMO role ..."
        objINFFSMOSinkContext.Add "FSMO", "INFRASTRUCTURE"
        objWMIServices.ExecNotificationQueryAsync objWMISink, _
                                                  cINFFSMOWMIQuery, _
                                                  , _
                                                  , _
                                                  , _
                                                  objINFFSMOSinkContext
        If Err.Number Then ErrorHandler (Err)
        WScript.Echo "Monitoring INFRASTRUCTURE FSMO role ..."
        objRIDFSMOSinkContext.Add "FSMO", "RID"
        objWMIServices.ExecNotificationQueryAsync objWMISink, _
                                                  cRIDFSMOWMIQuery, _
                                                  , _
                                                  , _
                                                  , _
                                                  objRIDFSMOSinkContext
        If Err.Number Then ErrorHandler (Err)
        WScript.Echo "Monitoring RID FSMO role ..."
        objDOMFSMOSinkContext.Add "FSMO", "DOMAIN NAMING"
        objWMIServices.ExecNotificationQueryAsync objWMISink, _
                                                  cDOMFSMOWMIQuery, _
                                                  , _
                                                  , _
                                                  , _
                                                  objDOMFSMOSinkContext
        If Err.Number Then ErrorHandler (Err)
        WScript.Echo "Monitoring DOMAIN NAMING FSMO role ..."
        objSCHFSMOSinkContext.Add "FSMO", "SCHEMA"
        objWMIServices.ExecNotificationQueryAsync objWMISink, _
                                                  cSCHFSMOWMIQuery, _
                                                  , _
                                                  , _
                                                  , _
                                                  objSCHFSMOSinkContext
        If Err.Number Then ErrorHandler (Err)
        WScript.Echo "Monitoring SCHEMA FSMO role ..."
    END CALLOUT B
        WScript.Echo vbCRLF & "Waiting for events..."
        PauseScript "Click on 'Ok' to terminate the script ..."
    .
    .
    .
        Sub SINK_OnObjectReady (objWMIInstance, objWMIContext)
            On Error Resume Next
            Wscript.Echo
            Wscript.Echo "BEGIN - OnObjectReady."
            WScript.Echo FormatDateTime(Date, vbLongDate) & " at " & _
                         FormatDateTime(Time, vbLongTime) & ": '" & _
                         objWMIInstance.Path_.Class & "' has been triggered."
    BEGIN CALLOUT C
            Set objContextItem = objWMIContext.Item ("FSMO")
            WScript.Echo
            WScript.Echo "'" & objContextItem.Value & "' FSMO role has been transferred from:"
            WScript.Echo "     '" & objWMIInstance.PreviousInstance.ds_fSMORoleOwner & "'"
            WScript.Echo "to:"
            WScript.Echo "     '" & objWMIInstance.TargetInstance.ds_fSMORoleOwner & "'"
    END CALLOUT C
            If Not IsNull (objWMIInstance) Then
               If SendMessage (cTargetRecipient, _
                               cSourceRecipient, _
                               "'" & objContextItem.Value & "' FSMO role has been transfered " & _
                                  FormatDateTime(Date, vbLongDate) & _
                                  " at " & _
                                  FormatDateTime(Time, vbLongTime), _
                               GenerateHTML (objWMIInstance.PreviousInstance, _
                                             objWMIInstance.TargetInstance) , _
                               "") Then
                  WScript.Echo "Failed to send email to '" & cTargetRecipient & "' ..."
               End If
            End If
    .
    .
    .
            Wscript.Echo "END - OnObjectReady."
        End Sub
        ]]>
       </script>
      </job>
    </package>

    Таблица 1. Активные роли FSMO и их размещение в AD

     

    Роль FSMO Контекст именования Имя DN объекта AD Класс WMI Свойство WMI
    PDC Emulator Домен DC=LissWare,DC=Net ds_domaindns ds_fSMORoleOwner
    Infrastructure Master Домен CN=Infrastructure,
    DC=LissWare,DC=Net
    ds_infrastructureupdate ds_fSMORoleOwner
    RID Master Домен CN=RID Manager$,
    CN=System,DC=LissWare,
    DC=Net
    ds_ridmanager ds_fSMORoleOwner
    Domain Naming Master Конфигурация CN=Partitions,
    CN=Configuration,
    DC=LissWare,DC=Net
    ds_crossrefcontainer ds_fSMORoleOwner
    Schema Master Схема CN=Schema,
    CN=Configuration,
    DC=LissWare,DC=Net
    ds_dmd ds_fSMORoleOwner



    Автор: Алан Лессо
    Источник: Windows IT pro




    Оцените статью: Голосов

    Материалы по теме:
  • Просмотр и передача ролей одиночного гибкого хозяина операций
  • Десять советов по созданию эффективной структуры Active Directory
  • Как составить запрос для поиска в Active Directory учетных записей компьютеров с незаполненным полем описания
  • Установка контроллера домена на Windows Server 2003.
  • Уникальные настройки безопасности групповой политики



  • Для отправки комментария, обязательно ответьте на вопрос

    Вопрос:
    Сколько будет пятнадцать минус пять?
    Ответ:*




    ВЕРСИЯ ДЛЯ PDA      СДЕЛАТЬ СТАРТОВОЙ    НАПИШИТЕ НАМ    МАТЕРИАЛЫ    ОТ ПАРТНЁРОВ

    Copyright © 2006-2022 Winblog.ru All rights reserved.
    Права на статьи принадлежат их авторам. Копирование и использование материалов разрешается только в случае указания явной гиперссылки на веб-сайт winblog.ru, как на источник получения информации.
    Сайт для посетителей возрастом 18+