SCCM 2007 R2 OSD - Развертывание ОС при наличии Double UUID

imageВ процессе перехода на Windows 7 всё чаще стали сталкиваться с проблемой невозможности развертывания OC с SCCM 2007 R2 из-за существующих совпадений Universal Unique Identifier (UUID) материнских плат. Ранее уже рассматривался один из возможных вариантов решения этой проблемы в заметке SCCM & Double UUID.  Но рассмотренный метод может подходить далеко не для всех компьютеров, так как не во всех случаях имеется возможность штатной замены UUID, тем более учитывая тот факт, что во многих ИТ инфраструктурах не так уж и редко можно встретить небрендовые сборки ПК. В статье ITBand.ru - Dublicate SMBIOS GUID приводится пример SQL запроса для построения отчёта SCCM, который поможет нам оценить "масштабы бедствия" среди существующих у нас клиентов Configuration Manager.

То есть чтобы получить развёрнутую информацию о том какие UUID встречаются в базе данных SCCM более 1 раза и в каком количестве создадим отчет с запросом:

select rs.Name0, rs.SMBIOS_GUID0, cnt

from dbo.v_R_System as RS

inner join ( select SMBIOS_GUID0, count (*) as cnt

from dbo.v_R_System where SMBIOS_GUID0 is not NULL

group by SMBIOS_GUID0 having count(Name0) > 1 ) as q

on rs.SMBIOS_GUID0 = q.SMBIOS_GUID0

order by cnt

Результат вывода будет выглядеть примерно так:

image


Для получения сводного количества вариантов совпадающих UUID немного модифицируем запрос:

select distinct rs.SMBIOS_GUID0, cnt

from dbo.v_R_System as RS

inner join ( select SMBIOS_GUID0, count (*) as cnt

from dbo.v_R_System where SMBIOS_GUID0 is not NULL

group by SMBIOS_GUID0 having count(Name0) > 1 ) as q

on rs.SMBIOS_GUID0 = q.SMBIOS_GUID0

order by cnt


Теперь видно, что например в нашем "зверинце" 37 разных вариантов UUID которые попадаются на более чем одном компьютере.
 

image

Учитывая тот факт, что нереально исправить ситуацию по совпадению в полной мере, было решено  прибегнуть к методу "обмана" SCCM.

Решение предлагаемое в заметке Idan at myITforum.com - How to enable OSD with duplicate UUID in Configuration Manager было применено, но в ситуации когда установка ОС производится с использованием загрузочного носителя  (не используется PXE) – безрезультатно. Возможно, что в случае с PXE этот метод и прокатил бы, но я если честно его в связке с PXE не проверял, так как такой режим установки у меня исключен изначально из-за того, что достаточно больше количество компьютеров имеют сетевые адаптеры не поддерживающие эту технологию.

В случае установки с загрузочного носителя решено было воспользоваться методом, описанным в комментарии от Александр Sh, который и помог избежать проблемы в нашей ситуации. Далее опишу этот метод по порядку действий.

Начнём с того что нам нужно будет сгенерировать некое уникальное значение UUID. Сделаем это с помощью PowerShell командой:

[guid]::NewGuid().ToString().ToUpper()

Запишем полученное значение, например в нашем случае 3A2F1978-584C-4B29-9BD1-EF737880C3AB, так как оно нам понадобится дальше.

Откроем SQL Server Management Studio, подключимся к базе данных SCCM и найдём хранимую процедуру NBS_LookupDevice (Programmability > Stored Procedures > dbo.NBS_LookupDevice):

image

В код процедуры добавим конструкцию подмены переменной @SMBIOS_GUID на сгенерированное нами ранее уникальное значение:

  IF @SMBIOS_GUID IN ('00000000-0000-0000-0000-000000000000',

  'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF',

  '03000200-0400-0500-0006-000700080009',
<Здесь перечисляем все дублирующиеся варианты UUID> ,

  'FEFEFEFE-FEFE-FEFE-FEFE-FEFEFEFEFEFE')

  BEGIN

      SET @SMBIOS_GUID ='3A2F1978-584C-4B29-9BD1-EF737880C3AB';

  END

Полученный ранее из отчёта список неуникальных UUID перечисляем через запятую и заключаем каждое значение в кавычки.

Готовый блок подмены вставляем в начало процедуры как показано в примере:

image

После внесённых изменений выполним Execute и попробуем снова запустить процедуру развертывания клиента с дублирующимся UUID. После успешной установки ОС мы сможем убедиться в том, что клиент SCCM зарегистрировался в БД со своим реальным "кривым" UUID:

image

Стоит помнить, что после применений обновлений к Configuration Manager, возможно код хранимой процедуры будет возвращён в исходное состояние, и нам снова потребуется его корректировка.

Добавить комментарий