Active Setup

Наверняка вы замечали, что самый первый вход пользователя в систему занимает несколько больше времени, чем все последующие. Это связано с тем, что при входе к пользователю применяются настройки различных программных продуктов, таких как Microsoft Office, Internet Explorer и т.п. Механизм, реализующий эти настройки, называется Active Setup.

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

Эту особенность Active Setup можно использовать в том случае, когда необходимо однократно выполнить какое либо действие, например произвести настройку пользовательского окружения для нового пользователя или установить\обновить ПО.

Настройки Active Setup находятся в реестре, в разделе HKLM\Software\Microsoft\Active Setup\Installed Components. Для каждого компонента есть отдельный раздел с именем, состоящим из уникального идентификационного номера (GUID). В разделе есть несколько параметров, из которых нас интересуют следующие:

(по умолчанию) — название компонента, которое отображается при выполнении;
StubPath — команда, которая должна быть выполнена. Здесь можно указать команду, скрипт (cmd, vbs или powershell) или исполняемый файл;
Version — версия компонента в текстовом формате, элементы разделены запятыми (напр. 1,0,00).

Active Setup, image #1

Принцип работы Active Setup прост. При входе пользователя система сравнивает содержимое разделов HKLM\Software\Microsoft\Active Setup\Installed Components и HKCU\Software\Microsoft\Active Setup\Installed Components. Для каждого раздела в HKLM должна быть копия с тем же GUID в HKCU. Дальше есть три варианта развития событий:

  1. Если копии нет, то выполняется команда, указанная в StubPath, после чего в HKCU создается раздел с тем же GUID и прочими параметрами.
    2. Если копия есть, то сравнивается значение параметра Version. Если версия в HKCU младше, чем в HKLM, то задание отрабатывает повторно, после чего номер версии в HKCU обновляется.
    3. Если же раздел с одинаковым GUID есть и в HKLM и в HKCU и номер версии у них совпадает, то значит компонент уже отработал для данного пользователя и запускать его не требуется.

Создание нового компонента

Первое, что нужно для создания собственного компонента — это GUID. Сгенерировать его можно с помощью PowerShell, командой:

[System.Guid]::NewGuid()

Active Setup, image #2

Затем в разделе HKLM\Software\Microsoft\Active Setup\Installed Components создаем подраздел с новым GUID и добавляем в него необходимые параметры Version и StubPath, а также при желании указываем имя компонента. Для примера я добавил в StubPath простенький cmd-скрипт, который выводит строку текста и ждет нажатия клавиши.

Active Setup, image #3

И при следующем входе в систему наш скрипт отрабатывает вот таким образом.

Active Setup, image #4

Используя GPO

Для централизованного управления Active Setup можно задействовать групповые политики. Для этого есть специальный инструмент «Предпочтения групповой политики» (Group Policies Preferences), который в числе прочего позволяет редактировать реестр. Порядок действий такой:

Сначала открываем редактор и создаем новый GPO. Открываем его на редактирование и переходим в раздел Computer Configuration\Preferences\Windows Settings\Registry. Кликаем правой клавишей и в контекстном меню переходим на New -> Registry Item.

Active Setup, image #5

Задаем все необходимые параметры ключа (путь, имя, тип), в качестве действия указываем создание (Create).

Active Setup, image #6

Таким же образом создаем все необходимые ключи. Затем полученную GPO привязываем к подразделению (OU). Теперь после применения политики задание отработает на всех компьютерах, находящихся в этом OU. А если потребуется перезапустить задачу, то достаточно отредактировать версию компонента (например с 1,0,0 на 1,0,1) и задача отработает повторно.

Active Setup, image #7

И в заключение одна особенность, которую нужно учитывать при использовании ActiveSetup. Дело в том, что ActiveSetup запускается перед загрузкой рабочего стола. Команды стартуют синхронно, при этом на время их выполнения вход в систему блокируется. И если созданное вами задание по какой либо причине не сможет отработать, то войти в систему не удастся. Поэтому перед применением скрипт\приложение стоит тщательно оттестировать.

13 views·1 share