SCDPM: Невозможно изменить Disk Allocation после переключения Exchange DAG

Симптомы:

Предположим, у вас есть Exchange 2010 с одной или несколькими Database Availability Groups и несколькими серверами в каждой из DAG. Вы настраиваете резервное копирование этих DAG при помощи DPM 2010 и выше (до 2012 R2 UR2 включительно). Через некоторое время, вы изменяете статус защищаемой копии почтовой базы с активного на пассивный или наоборот (например, переключаете активную копию базы на другой сервер в DAG). После этого, на странице Review disk allocation мастера создания/изменения групп защиты и в окне Modify Disk Allocation для баз, статус которых был изменён, вы будете получать ошибку:
"The operation failed because the data source VSS component {76fe1ac4-15f7-4bcd-987e-8e1acb462fb7} is missing.
Check to see that the protected data source is installed properly  and the VSS writer service is running.

ID: 915
Details: The operation completed successfully (0x0)»

If you’ll try to add such DB to secondary DPM server, you’ll receive same error at a disk size calculation step.

Если вы попробуете в этот момент добавить такую базу на вторичный сервер SCDPM, вы не сможете этого сделать из-за такой же ошибки в момент рассчёта дискового пространства.

Это известная Microsoft проблема, которая не будет исправлена в обозримом будущем.

Почему это происходит?

Информация о защищаемых ресурсах хранится в таблицах tbl_IM_DataSource и tbl_IM_ProtectedObject базы DPM. В столбцах ApplicationPath, LogicalPath и PhysicalPath содержится XML-документ, описывающий защищаемый ресурс. В случае с Exchange 2010 DAG он будет выглядеть примерно так:

Здесь мы видим:
DAGNODE2.example.com — имя узла DAG, с которого создаётся резервная копия почтовой базы
MAILDB01 — имя почтовой базы
Microsoft Exchange Server\Microsoft Information Store\Replica\DAGNODE2 — путь до копии базы на защищаемом сервере. Обратите внимание на слово «Replica». Оно означает, что данная копия базы — пассивная. Если вы настроили резервное копирование для активной копии базы, эта часть пути просто будет отсутствовать.

При изменении статуса копии базы с активного на пассивный и наоборот, логический путь до почтовой базы на сервере меняется, но в DPM информация об этом не передаётся и в базе DPM остаются неконсистентные данные.

Решение:

Существуют 2 обходных пути (выбирайте любой, который больше вам подходит):

На стороне DPM:

  1. Остановить защиту проблемной базы, с сохранением данных.
  2. Добавить базу обратно в группу защиты. При этом DPM обновит данные в таблицах tbl_IM_DataSource и tbl_IM_ProtectedObject.
  3. После прохождения consistency check вы сможете свободно управлять выделенным для неё местом и добавить на вторичный DPM-сервер.

На стороне Exchange:

  1. Восстановить активный/пассивный статус базы в то же состояние, в котором она была при добавлении её в SCDPM:
    1. Если защищаемая копия базы была пассивной — сделайте её пассивной.
    2. Если же она была активной, то сделайте её активной опять.

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

SCCM: Коллекция устройств на основе членства в локальной группе

Недавно передо мной возникла задача отделять в SCCM рабочие станции, управляемые IT-отделом, от рабочих станций, управляемых пользователями самостоятельно. Критерием самостоятельно управляемой рабочей станции было выбрано наличие каких-либо учётных записей в группе локальных администраторов, кроме Administrator, Domain Admins и группы сотрудников техподдержки. Все рабочие станции расположены в одном OU, поэтому создание коллекций по OU не подходило.

Как вы возможно знаете, SCCM 2012 не имеет встроенных средств для получения членства в локальных группах рабочих станций и серверов. Спасибо Sherry Kissinger, которая решила эту проблему с использованием Compliance Settings.
После установки её пакета, вы получите новые Configuration Baseline, Configuration Item и 2 таблицы и 1 view в базе SCCM: LocalGroupMembers_DATA, LocalGroupMembers_HIST и v_GS_LocalGroupMembers0.

В дальнейшем вы можете использовать данные из view v_GS_LocalGroupMembers0 для построения отчётов о членах локальных групп управляемых вами компьютеров (Не забудьте распространить baseline на нужную коллекцию компьютеров, но ни в коем случае не на контроллеры домена! Например, создайте коллекцию с правилом Include для стандартной коллекции All Systems и правилом Exclude для коллекции All Domain Controllers. Вы можете загрузить MOF-файл такой коллекции здесь).

НО, к сожалению, ни таблица LocalGroupMembers_DATA, ни v_GS_LocalGroupMembers0 недоступны для WQL-запросов, которые используются при создании коллекций.
Казалось бы, я застрял. Что у меня было на руках на тот момент:

  • У меня есть все данные о членстве в локальных группах на всех компьютерах.
  • Я могу построить любые отчёты по ним.
  • У меня есть средства для построения коллекций по данным из стандартных таблиц SCCM.
  • SCCM не может использовать данные из нестандартных таблиц для построения коллекций.

Итак, нам нужен способ поместить данные из таблицы LocalGroupMembers_DATA в стандартные таблицы SCCM для построения коллекции по ним и PowerShell нам в этом поможет.
Есть как минимум 2 способа получения данных из SQL в PowerShell:

  1. Подключаться напрямую к базе и использовать SQL-запросы при помощи командлетов SQL.
  2. Или подключаться к SQL Server Reporting Services с использованием командлета New-WebServiceProxy. Stefan Stranger и Jin Chen написали сценарий для этого.

Т.к. это PowerShell, дальше мы можем делать с данными из SQL всё, что угодно. Наша задача — это наполнение коллекции устройств, и тут опять существует как минимум 2 варианта:

  1. Добавлять компьютеры в группу AD DS, по которой затем создавать коллекцию устройств в SCCM. В этом случае, метод обнаружения Active Directory Group Discovery для сайта и домена, где будет расположена эта группа, должен быть активирован.
  2. Напрямую добавлять компьютеры в коллекцию SCCM используя командлет Add-CMDeviceCollectionDirectMembershipRule.

Т.к. и отчёт, и группа в AD DS будут мне полезны в будущем, я выбрал вариант именно с ними.

Итак, общий сценарий действий такой:

  1. Активировать Active Directory Group Discovery.
  2. При помощи Compliance Settings собирать сведения о членстве в локальных группах на компьютерах.
  3. Строить отчёт по этой таблице на любом SSRS.
  4. Используя командлет New-WebServiceProxy, получать имена компьютеров из этого отчёта.
  5. Добавлять эти компьютеры в специальную группу.
  6. Стандартными средствами SCCM наполнять коллекцию устройств по группе AD DS.

Я построил отчёт в котором вывожу списком все компьютеры, не удовлетворяющие условиям, описанным выше. Вот, как выглядит запрос для первого DataSet’а:

Вы легко можете расширить его для исключения как-то других групп.
Обратите внимание на параметр CompOU: в веб-интерфейсе вы можете выбрать одно или несколько OU, откуда выводить компьютеры.

Для получения полного списка этих OU из ваших лесов, служит второй DataSet с таким кодом:

Далее я модифицировал сценарий RenderSQLReportFromPosh.v1.000.ps1 таким образом, чтобы он не только получал отчёт из SSRS, но и на его основе формировал группу в AD DS. Вот его полный код:

Сценарий получает отчёт с SSRS, определяемому в переменных $URI и $ReportPath, сравнивает список компьютеров из него с группой $GroupName и добавляет/удаляет компьютеры из неё таким образом, чтобы она совпадала со списком из отчёта.
Сценарий ведёт журнал работы по пути $Log, в который записывает, удалил он компьютер в группу или, наоборот, добавил.
В качестве параметров я передаю отчёту 2 OU ($param1 и $param2). Если вам нужно больше, просто создавайте новые параметры и добавляйте их в переменную $parameters.

Наконец, я создал стандартную коллекцию устройств на основе членства в группе $GroupName и всё заверте…

Загрузить RDL-файл отчёта и сценарий вы можете здесь. Не забудьте в отчёте создать DataSource для подключения к вашему серверу SSRS.

SCCM: Коллекция для всех контроллеров домена

Существует множество способов определить коллекцию, содержащую все контроллеры домена. Вот несколько примеров:

Все компьютеры с установленной ролью Domain_Controller:

Все компьютеры, с основной группой Domain Controllers:

Все члены группы Domain Controllers:

Лично я предпочитаю первый вариант, с определением по установленным ролям в операционной системе. Вы можете загрузить MOF-файл для такой коллекции здесь. Просто импортируйте его, как описано в статье How to Create Collections in Configuration Manager и новая коллекция «All Domain Controllers» появится в вашей консоли SCCM.