Групповые политики: запуск скрипта только один раз

Логон (логоф) скрипты групповых политик позволяют запустить bat или PowerShell скрипт при загрузке компьютера или входе (выходе) пользователя. В некоторых случаях администратору нужно, чтобы определенный скрипт (команда) запускались для каждого пользователя или компьютера только один раз, и не отрабатывал при следующих входах.

Одним из вариантов решения данной проблемы может быть использование стандартного логон скрипта, который проверяет наличие определенного флага на компьютере. Этом может быть параметр в реестре или текстовый файл на диске

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

  1. Создайте следующий bat файл (corp_user_init.bat) и поместите его в каталог %SystemRoot%\SYSVOL\sysvol\<domain name>\scripts на котроллере домена: @echo off
    IF EXIST C:\Users\%UserName%\AppData\app_init.txt GOTO END
    :APPFLAG
    date /t >> C:\Users\%UserName%\AppData\app_init.txt
    time /t >> C:\Users\%UserName%\AppData\app_init.txt
    REM Здесь добавьте код вашего скрипта, который нужно выполнить один раз
    :END

    Данный скрипт при первом запуске создает небольшой текстовый файл в профиле пользователя. При следующем запуске скрипта через GPO, скрипт проверяет есть ли данный файл на диске. Если файл присутствует, значит скрипт уже выполнялся и выполнять код повторно не нужно.
  2. Откройте консоль редактора доменных GPO ( gpmc.msc );
  3. Создайте новую политику и назначьте ее на OU с пользователями (или компьютерами, но для этого нужно включить режим замыкания групповой политики — Loopback Processing mode);
  4. Перейдите в раздел User Configuration -> Windows Settings -> Scripts (Logon / Logoff);
  5. Выберите Logon;
  6. Нажмите кнопку Add и укажите путь к вашему bat файлу в SYSVOL ( \\winitpro.ru\SysVol\winitpro.ru\scripts );
    запуск скрипта или команды через GPO только один раз
  7. После обновления групповых политик на клиенте при входе пользователя будет выполнен ваш скрипт. Убедитесь, что он успешно создал файл app_init.txt в профиле пользователя;
    Если GPO со скриптом не применилась, используйте утилиту gpresult и методики диагностики из статьи Почему не применяется групповая политика.
  8. При следующем входе пользователя на компьютер, основной код скрипта не будет выполняьбся. Т.е. по сути скрипт применится к пользователю только один раз.

Другой вариант разового запуска скрипта через GPO предполагает использование разового задания планировщика Task Scheduler.

  1. Поместите ваш файл скрипта (это может быть bat или PowerShell) в каталог Sysvol на контроллере домена (\\<ваш_домен>\SysVol\<ваш_домен>\scripts);
  2. Создайте новую GPO, назначьте ее на OU с пользователями и откройте ее настройки;
  3. Перейдите в раздел Preferences -> Control Panel Settings -> Scheduled Task -> New -> Immediate Task (At least Windows 7);
  4. Укажите имя задания;
    создать задание планировщика через GPO
  5. Перейдите на вкладку Actions, нажмите New и укажите полный UNC путь к вашему скрипту в SYSVOL;
    запускать файл скрипт из sysvol
  6. Затем перейдите на вкладку Common и включите опцию Apply once and do not reapply;
    применять задание планиорпвщика только один раз
  7. Такое задание также отработает на компьютере только один раз при первом входе пользователя.
Если вы хотите запускать PowerShell скрипты через GPO, нужно настроить политику выполнения скриптов PS1, или использовать параметр -ExecutionPolicy Bypass при запуске скрипт (пример есть здесь).

Предыдущая статья Следующая статья


Комментариев: 21 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)