Вы можете использовать групповые политики чтобы скопировать определенные файлы и папки на компьютеры пользователей компьютеры домена . Вы можете поместить файлы на рабочий стол, в определенный каталог профиля пользователя или любой другой каталог на локальном диске Windows компьютера. С помощью GPO вы можете автоматически копировать и обновлять из единого репозитория различные файлы конфигурации, ini-файлы, исполняемые exe-файлы приложений, dll-библиотеки или скрипты.
Копирование файлов с помощью Group Policy Preferences
Допустим, ваша задача – скопировать два файла ( app.exe
и settings.xml
) на рабочий стол некоторых пользователей домена AD.
Создайте каталог, в котором будут хранится исходные файлы, которые нужно скопировать на компьютеры пользователей. Это может быть, как общая SMB папка на файловом сервере, так и каталог SYSVOL на контроллере домена (каталог автоматически реплицируется между всеми DC в домене с помощью DFS, его удобно использовать с точки зрения уменьшения нагрузки на WAN каналы). Я поместил файлы в каталог \test.comSYSVOLtest.comscriptsCorpApp
.Убедитесь, что у группы Authenticated Users есть права на чтение в этой папке.
- Создайте новую группу безопасности в AD CorpAPPUsers через графическую оснастку Active Directory Users and Computers (
dsa.msc
). Можно создать группу с помощью PowerShell командлета :New-ADGroup CorpAPPUsers -path 'OU=Groups,OU=SPB,dc=test,DC=com' -GroupScope Global -PassThru –Verbose
Добавьте в группу пользователей, на рабочий стол которых нужно автоматически копировать файлы через GPO:Add-AdGroupMember -Identity CorpAPPUsers -Members aaivanov, bbpetrov, ausidorov
- Запустите консоль управления политиками Group Policy Management (
gpmc.msc
); - Создайте новый объект GPO (CopyCorpApp) и назначьте его на OU, в котором находятся компьютеры пользователей;
- Перейдите в режим редактирования GPO (Edit);
- Разверните следующий раздел предпочтений групповых политик (Group Policy Preferences) User Configuration –> Preferences -> Windows Settings -> Files ;Если нужно скопировать файлы на компьютеры независимо от пользователей, которые на них залогинены, лучше использовать аналогичную политику в секции GPO Computer Configuration.
- Выберите пункт New –> File ;
- Укажите исходный файл в сетевом каталоге (source) и целевой путь на компьютере, куда который нужно поместить файл. Если указанный путь не существует, он будет автоматически создан при копировании (например, допустимо использовать
C:Users%logonuser%MyNewFolderFolder1file.txt
) Обязательно укажите полное имя целевого файла (если просто указать каталог, при копировании появится ошибка “access denied”);Можно указать для копирования как конкретный файл, так и скопировать сразу все файлы из каталога, поставив*
; - Доступно 4 режима работы GPO копирования файлов:
- Create – файл копируется в целевой каталог, только если он в нем отсутствует;
- Replace – целевой файл на компьютере пользователя всегда заменяется исходным (если исходный файл большой, он будет копироваться при каждом обновлении GPO, что может вызвать нагрузку на сеть). Если вы хотите заменить файл только один раз, включите опцию ‘Apply once and do not reapply’ на вкладке Common;
- Update (политика по умолчанию) – если файл уже существует и исходный и целевой файлы отличаются, то копирование не будет выполнение (будут заменены только атрибуты). Если файл отсутствует – он будет скопирован;
- Delete – удалить целевой файл.
- В качестве целевого каталога можно выбрать конкретную папку на компьютере, или использовать переменные окружения. Чтобы скопировать файл на рабочий стол текущего пользователя, используйте
%DesktopDir%
;Полный список переменных окружения можно вывести, нажавF3
.
Ниже представлен список переменных окружения, которые можно использовать в качестве целевых папок при копировании файлов через GPO:%AppDataDir% Папка Application Data текущего пользователя %CommonAppdataDir% Папка Application Data всех пользователей %CommonDesktopDir% Рабочий стол всех пользователей Переменная является deprecated и вместо нее лучше использовать
%Public%Desktop
%CommonProgramsDir% Каталог Programs всех пользователей. %CommonStartMenuDir% Меню Пуск (папка Start Menu) всех пользователей. %CommonStartUpDir% Каталог автозагрузки (Startup) всех пользователей %ComputerName% NetBIOS имякомпьютера %DesktopDir% Рабочийстолтекущегопользователя %DomainName% Имятекущегодомена %LocalTime% Локальное время компьютера %LogonDomain% Домен текущего пользователя %LogonServer% Имя контроллера домена, на котором аутентифицирован пользователь %LogonUser% Имя текущего пользователя %NetPlacesDir% Каталог сетевое окружени е (My Network Places) пользователя %ProgramFilesDir% Каталог Program Files Windows %ProgramsDir% Каталог Programs пользователя %RecentDocumentsDir% Каталог Recent Documents пользователя %SendToDir% Каталог Send пользователя %StartMenuDir% Меню Пуск (папка Start Menu) текущего пользователя %StartUpDir% Каталог автозагрузки (Startup) текущего пользователя %SystemDir% Каталог Windows. %SystemDrive% Диск, на котором установлена операционная система %TempDir% Папка Temp пользователя %WindowsDir% Каталог Windows. - Чтобы скопировать файлы на рабочий стол только определенных пользователей, нужно в настройках политики перейти на вкладку Common , включить Item -Level Targeting и нажать кнопку Targetng ;
- В открывшемся окне можно выбрать дополнительные условия применения данной GPO. В нашем случае я хочу ограничить политику так, чтобы она применялась только для членов группы CorpAPPUsers. Для это нужно нажать New Item -> Security Group и выбрать доменную группу пользователей;
- Т.к. мы назначили GPO на Organizational Unit с компьютерами (а не пользователями), нужно включить опцию замыкания GPO. В Configure user Group Policy loopback processing mode = Merge в Computer Configuration -> Policies -> Administrative Templates -> System -> Group Policy;
- Осталось обновить параметры групповых политик на клиентских компьютерах (
gpupdate /force
или выполнить логофф/логон), и убедиться, что на рабочий стол пользователей были автоматически cкопированы два файла.
Таким образом можно скопировать на компьютеры пользователей скрипты, исполняемые файлы приложений, или системные утилиты (PsTools, iperf , Portqry и т.д). Можно скопировать файл в Program Files и через GPO поместить ярлык на него на рабочий стол .
Если после настройки политик файлы, вы можете разобраться почему не применяется групповая политика с помощью утилиты gpresult.exe . Также для получения детальных логов копирования файлов через GPO, вы можете включить лог в разделе Computer Configuration -> Policies -> Administrative Templates -> System -> Group Policy -> Logging and tracing. Включите параметр Configure Files preferences logging and tracing и выберите в настройках режим Informational, Warning, and Errors .
Теперь на клиентах можно отследить все события и ошибки копирования файлов через GPO в журнале Event Viewer -> Application. Включите фильтр по источнику Group Policy Files.
В моем случае при копировании файлов через GPO появилась ошибка Event ID 4098:
The user '%CommonDesktopDir%' preference item in the 'CopyCorpApp {FC41DB99-AFD2-4F5B-9112-2C90BF4A5A13}' Group Policy Object did not apply because it failed with error code '0x80070005 Access is denied.' This error was suppressed.
Данная проблема решилась предоставлением NTFS прав на чтение файлов в каталоге-источнике для группы Authenticated Users .
Скопировать все папки и файлы с помощью логон-скрипта GPO
Обратите внимание, что в Group Policy Preferences нет встроенной возможности скопировать целиком каталог со вложенными папками и файлами. Если нужно скопировать папку с большим количеством файлов, или вы хотите, чтобы содержимое целевых папок пользователей всегда обновлялось при обновлении любого файла в источнике, можно сделать небольшой логон скрипт и запускать его через GPO .
Рассмотрим скрипт для копирования всех новых (измененных) файлов из целевого каталога на компьютеры пользователей:
- Создайте файл скрипта в Sysvol:
CopyCorpApp.bat
IF EXIST "C:CorpApp" EXIT
MD "C:CorpApp"
xcopy \msk-dc02RDS-ClusterCorpApp*.* C:CorpApp /e /y /k /r /d /iВ некоторых случаях для копирования фалов предпочтительнее использовать утилиту robocopy .Этот скрипт скопирует всю структуру каталогов и все файлы со всеми атрибутами. Копируются только новые или измененные файлы. Это означает, что при каждом запуске скрипта, если в исходном каталоге нет изменений, команда xcopy не будет перезатирать файлы. - Создайте новую GPO (как указано выше) и назначьте ее на OU с компьютерами пользователей;
- Перейдите в раздел Computer Configuration->Policies->Windows Settings->Scripts (Startup/shutdown) . Выберите Startup ;
- Нажмите кнопку Add и укажите UNC путь к вашему скрипту на SysVol;
- Перезагрузите компьютер пользователя и проверьте, что в исходная папка была успешно скопирована.