Решение проблемы с ошибкой в SCM: 0 unique settings from the GPO’s xxx unique settings apply to this product.

Несколько дней назад я столкнулся с неприятным багом в SCM 4.0. Признаться, что-то подобное мне уже встречалось ранее в SCM 3.0, но тогда просто не было времени разбираться.

Коротко о проблеме. Делаем резервную копию Contoso Windows Server 2012 R2 Default Domain Controllers Policy, импортируем в SCM. Далее, если мы хотим выполнить сравнение и последующее слияние нашей политики и рекомендованного стандарта, то прежде необходимо ассоциировать импортированную политику (сделать Associate) с одним из продуктов. В нашем случае это Windows Server 2012 R2.

Выбираем политику, нажимаем Associate, ищем и щелкаем на Windows Server 2012 R2. И что же мы видим?

selectOS-GUI

Кнопка «Associate» недоступна! Можно выбрать Windows Server 2012, но не Windows Server 2012 R2. Потратив с полчаса на попытки найти концы на форумах и во внутренних списках рассылки (не увенчались успехом), я решил попробовать разобраться с проблемой самостоятельно, по крайней мере, понять причину такого поведения.

Известно, что SCM использует WID (или SQL Express) в качестве СУБД, поэтому я решил посмотреть на запросы, генерируемые в сторону SQL server. Как вы уже догадались, для этой задачи вполне подойдет SQL Profiler.

Итак, шаг первый — смотрим, что происходит при щелчке на Windows Server 2012 R2 в окне на скриншоте выше. Мы видим массу однотипных запросов вида:
profiler-init

Попробуем выполнить один из таких запросов и посмотреть на результаты:
selectOS-profiler
Плохо, результатов нет, запрос ничего не вернул.

А что будет, если выбрать Windows Server 2012 вместо Windows Server 2012 R2?
selectOSsuc-profiler

Вау! Возвращается одна запись!

Пришло время посмотреть на вызываемую хранимую процедуру, вот она:
SqlSP

Что ж, теперь можно визуально посмотреть и на данные в таблице PrePopulatedProductAndCceIDForSetting и оценить, что она содержит применительно к Windows Server 2012 R2.

Выполним следующий запрос, в надежде обнаружить записи, относящиеся к Windows Server 2012 R2.

prepop

Опять пусто. Но, по крайней-мере, теперь все становится понятным.

По какой-то причине настройки для Windows Server 2012 R2 не попали в таблицу PrePopulatedProductAndCceIDForSetting при импорте стандарта. Я не уверен, что они обязательно должны были туда попасть (PrePopulated в названии вызывает определенные сомнения).

Но тогда, очевидно, присутствует ошибка в коде хранимой процедуры, которая, по всей видимости, используется в процессе определения активности кнопки Associate.

Проверим наше предположение, немного изменив код хранимой процедуры.

DISCLAIMER: Все, что описано ниже, не поддерживается производителем ПО, сохранение работоспособность продукта и данных в базе SCM не гарантируется. Вы вносите предлагаемые изменения на свой страх и риск.

Изменим код хранимой процедуры таким образом, чтобы она всегда возвращала хотя бы одно значение.


USE [XTrans]
GO

/****** Object: StoredProcedure [dbo].[GetCcIdForSettingAndOptions] Script Date: 01.08.2016 21:46:13 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetCcIdForSettingAndOptions]
@SettingID uniqueidentifier,
@ProductID uniqueidentifier
AS
BEGIN
SELECT [CCE-ID],[ArrayOfOptionIdAndCceId]
FROM [dbo].[PrePopulatedProductAndCceIDForSetting]
WHERE [dbo].[PrePopulatedProductAndCceIDForSetting].SettingID = @SettingID AND
[dbo].[PrePopulatedProductAndCceIDForSetting].ProductID = @ProductID
/* Изменения начинаются здесь */
UNION
SELECT Cast('' as nvarchar(max)) as [CCE-ID],Cast('' as varchar(max)) as [ArrayOfOptionIdAndCceId]

/* Изменения заканчиваются здесь */
END

GO

 

Мы изменили код, пришло время проверить работу SCM. Нам даже не нужно закрывать и отрывать приложение заново.
allok1

Ура! Кнопка ожила!
Проверим функцию слияния нашей политики со стандартом:
allok2

Похоже, все работает, хотя все это нужно еще потестировать и проверить. Оставляйте комментарии, если данный обходной путь оказался вам полезен и сэкономил время.

Ну и конечно, рассчитываем, что эта ошибка будет исправлена Microsoft в самом ближайшем будущем.

Комментарии 1

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *