Версия: gpupdate-0.13.2-alt1 Предварительно: - Настроены механизмы GPUpdate для управления файлами - Включены экспериментальные политики Шаги воспроизведения: 1) В GPUI создать файл для пользователя с местом назначения %DesktopDir%/test.txt 2) Выполнить gpupdate на клиентской машине доменным пользователем 3) Изменить ранее созданный файл, поменяв место назначения на %DesktopDir%/test3.txt и действие на "Заменить" 4) Повторить 2 шаг Фактический результат: Создан %DesktopDir%/test3.txt, прошлый %DesktopDir%/test.txt не удалён. Ожидаемый результат: Создан %DesktopDir%/test3.txt, прошлый %DesktopDir%/test.txt удалён. ==== Метод act() класса Files_cp: def act(self): if self.action == FileAction.CREATE: self._create_action() if self.action == FileAction.UPDATE: self._update_action() if self.action == FileAction.DELETE: self._delete_action() if self.action == FileAction.REPLACE: self._delete_action() self._create_action() Метод _delete_action() класса Files_cp: def _delete_action(self): list_target = [self.targetPath.name] if self.is_pattern(self.targetPath.name) and self.targetPath.parent.exists() and self.targetPath.parent.is_dir(): list_target = fnmatch.filter([str(x.name) for x in self.targetPath.parent.iterdir() if x.is_file()], self.targetPath.name) logdata = dict() for targetFile in list_target: targetFile = self.targetPath.parent.joinpath(targetFile) try: if targetFile.exists(): targetFile.unlink() logdata['File'] = targetFile log('D193', logdata) except Exception as exc: logdata['exc'] = exc logdata['targetPath'] = self.targetPath logdata['targetFile'] = targetFile log('D165', logdata) Информацию о файлах получаем из dconf, но не обрабатываем прошлое значение, из-за чего при self.action == FileAction.REPLACE выполняется только self._create_action(), хотя по задумке старый файл должен удаляться, а новый создаваться. На нашем вики написано, что "Групповая политика «Файлы» (Files) позволяет проводить операции с файлами: копировать файлы в нужное расположение, удалять, заменять, обновлять (атрибуты) файлов". В перечне возможностей: "удалить файл (или несколько файлов в одном каталоге) и заменить его копией файла из исходного каталога;"
Действительно, в текущей реализации обработки политик при действии REPLACE отсутствует удаление предыдущей версии. Раньше gpupdate не сохранял предыдущие состояния политик, поэтому логика замены ограничивалась только применением новых значений. Теперь, когда в dconf хранятся предыдущие настройки, можно (и нужно) доработать обработку REPLACE, чтобы она учитывала старые параметры и выполняла полную замену в соответствии с ожидаемым поведением.