Как автоматически удалить старые версии клиента 1С у пользователей?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При администрировании крупных сетей (от 50 и более рабочих станций) системные администраторы 1С неизбежно сталкиваются с проблемой накопления старых версий платформы «1С:Предприятие». Каждое обновление оставляет в системе каталог предыдущего релиза. Со временем десятки гигабайт мусора забивают системные диски пользователей, вызывая дефицит свободного места и путаницу при запуске баз. Удалять эти папки вручную на 500 машинах — задача нереалистичная.

В этой статье мы подробно разберем, как правильно и безопасно автоматизировать процесс очистки компьютеров пользователей от неиспользуемых релизов платформы 1С. Мы рассмотрим стандартные механизмы деинсталляции, напишем надежный скрипт на PowerShell, разберем интеграцию с групповыми политиками (GPO) и укажем на критические ошибки, которые могут нарушить работоспособность операционной системы.

Почему нельзя просто удалить папку 1cv8 из %ProgramFiles%?

Среди начинающих администраторов часто встречается совет: просто очистить содержимое каталога C:\Program Files\1cv8\ или C:\Program Files (x86)\1cv8\, оставив только папку с последним релизом. Это крайне грубый и опасный метод!

Рассмотрим подробнее, к чему приводит ручное удаление каталогов программ:

  1. Повреждение реестра Windows: Платформа 1С устанавливается с помощью Windows Installer (MSI). Информация о каждой установленной версии, ее компонентах, путях и ярлыках записывается в системный реестр. Если физически удалить файлы, записи в реестре останутся «битыми».
  2. Проблемы при последующих обновлениях: При попытке установить или обновить платформу служба Windows Installer будет пытаться обратиться к предыдущим инсталляторам. Обнаружив несоответствие реестра и файловой системы, инсталлятор может выдать критическую ошибку, полностью заблокировав установку новых версий 1С на данном ПК.
  3. Ошибки файловых ассоциаций: Программа запуска 1cestart.exe может потерять связь с зарегистрированными библиотеками и типами файлов, из-за чего ярлыки баз перестанут открываться.

Единственно правильный способ удаления — использование штатных механизмов деинсталляции Windows Installer через командную строку или специализированные скрипты.

Метод 1. Удаление через утилиту msiexec (классический подход)

Для удаления конкретной версии платформы можно использовать штатный инструмент Windows — msiexec.exe. Команда деинсталляции в «тихом» режиме (без вывода окон пользователю) выглядит следующим образом:

msiexec.exe /x {GUID_ПРОГРАММЫ} /qn /norestart

Где {GUID_ПРОГРАММЫ} — это уникальный идентификатор конкретного релиза 1С в системе. Основная сложность данного метода заключается в том, что у каждого релиза платформы (например, 8.3.21.1607, 8.3.22.1709 и т.д.) свой собственный уникальный GUID. Более того, GUID отличаются для 32-битных (x86) и 64-битных (x64) версий клиента.

Если у вас есть оригинальный дистрибутив старой платформы (в частности, файл 1CEnterprise 8.msi), вы можете запустить удаление, указав путь к этому файлу:

msiexec.exe /i "C:\PathToDistributive\1CEnterprise 8.msi" /quiet REMOVE=ALL

Однако хранить на сервере десятки старых дистрибутивов ради удаления — неэффективно. Поэтому мы перейдем к более гибким и современным решениям.

Метод 2. Рекомендуемый способ — автоматизация через PowerShell

Для очистки 500 компьютеров оптимально использовать PowerShell-скрипт. Наша задача — заставить скрипт самостоятельно просканировать системный реестр, найти все установленные версии «1С:Предприятие», сопоставить их с версией, которую необходимо оставить (актуальной рабочей версией), и автоматически запустить деинсталляцию для всех остальных.

Важное предупреждение: Избегайте использования WMI-класса Win32_Product (команда типа Get-WmiObject Win32_Product). Вызов этого класса заставляет ОС Windows выполнять полную проверку согласованности и самовосстановление всех установленных в системе MSI-пакетов. Это вызывает колоссальную нагрузку на жесткий диск, длится очень долго и может повредить другие установленные программы.

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


# PowerShell скрипт для удаления старых версий 1С:Предприятие
# Укажите версию, которую НЕЛЬЗЯ удалять (ваша текущая рабочая платформа)
$KeepVersion = "8.3.25.1234"

# Пути к веткам реестра для 32-битных и 64-битных приложений
$RegPaths = @(
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)

# Получаем список всех установленных программ
$InstalledApps = Get-ItemProperty $RegPaths | Where-Object { $_.DisplayName -like "*1C:Предприятие*" -or $_.DisplayName -like "*1CEnterprise*" }

foreach ($App in $InstalledApps) {
    $Name = $App.DisplayName
    $Version = $App.DisplayVersion
    $UninstallStr = $App.UninstallString

    # Проверяем, совпадает ли версия с той, которую нужно сохранить
    if ($Version -ne $KeepVersion) {
        Write-Host "Найдена старая версия: $Name ($Version). Запуск удаления..."
        
        # Проверяем, использует ли деинсталлятор утилиту msiexec
        if ($UninstallStr -match "{.*}") {
            $Guid = $Matches[0]
            # Формируем команду тихого удаления
            $Arguments = "/x $Guid /qn /norestart"
            
            # Запускаем процесс удаления и ждем его завершения
            Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Wait -NoNewWindow
            Write-Host "Версия $Version успешно удалена."
        }
    } else {
        Write-Host "Версия $Version является актуальной и будет сохранена."
    }
}

Давайте разберем по шагам, как работает этот скрипт:

  1. Мы задаем переменную $KeepVersion, содержащую номер релиза платформы, который должен остаться на компьютере пользователя.
  2. Скрипт обращается к разделам реестра Uninstall для 64-битных и 32-битных программ.
  3. Фильтруются только те записи, в названии которых содержатся ключевые слова «1C:Предприятие» или «1CEnterprise».
  4. Для каждого найденного соответствия проверяется номер версии. Если он отличается от нашей целевой переменной, скрипт извлекает уникальный идентификатор GUID из строки удаления UninstallString.
  5. С помощью командлета Start-Process инициируется фоновый запуск деинсталлятора msiexec.exe с ключами /qn (полная тишина без диалоговых окон) и /norestart (запрет перезагрузки ПК во время работы скрипта). Параметр -Wait гарантирует, что скрипт не начнет удалять следующую версию, пока не завершится удаление текущей.

Метод 3. Использование встроенного механизма автоудаления (начиная с 8.3.24)

Если в вашей организации используется современная платформа версии **8.3.24** и выше, фирма «1С» предлагает штатный автоматический функционал деинсталляции устаревших платформ силами самого клиента запуска.

Рассмотрим подробнее настройки этого механизма:

  1. Запустите окно выбора информационных баз 1С (программу запуска 1cv8s).
  2. Нажмите кнопку «Настройка» в правой панели управления окном.
  3. В открывшемся окне найдите гиперссылку «Удалять неиспользуемые версии...».
  4. Здесь вы можете задать период (в днях), по истечении которого неиспользуемая версия платформы будет считаться устаревшей и подлежать автоматической очистке. Также здесь настраивается список исключений (версий, которые нельзя удалять ни при каких условиях).

Важный нюанс: Этот способ имеет существенное ограничение. Процесс удаления запускается от имени текущего пользователя ОС. Если у рядового сотрудника на его рабочем компьютере отсутствуют права локального администратора (что является стандартом безопасности в крупных сетях), операционная система заблокирует удаление через механизм контроля учетных записей (UAC). Таким образом, для 500 машин этот метод применим только в том случае, если пользователи работают с правами администратора, либо на терминальных серверах.

Опасность использования устаревшего инструмента WMIC

В старых инструкциях часто рекомендуют использовать одну простую строку в cmd-файле для удаления через консоль WMI:

wmic product where "name like '1CEnterprise%'" call uninstall

Внимание! Начиная с Windows 11 версии 24H2 и Windows Server 2025, корпорация Microsoft полностью удалила компонент `WMIC` из состава операционной системы. Попытка выполнить данный скрипт на современных клиентских машинах приведет к ошибке командной строки и полному игнорированию процесса удаления. Полностью откажитесь от использования утилиты `wmic` в пользу PowerShell-скриптов, работающих напрямую с реестром.

Метод 4. Развертывание скрипта через Групповые политики (GPO)

Чтобы запустить созданный нами PowerShell-скрипт на всех 500 компьютерах организации, воспользуемся контроллером домена Active Directory и механизмом групповых политик.

Разберем этот процесс по шагам:

  1. Сохраните написанный PowerShell-скрипт в файл с расширением `.ps1` (например, `UninstallOld1C.ps1`).
  2. Поместите этот файл в общедоступную сетевую папку на контроллере домена, к которой у всех компьютеров сети есть права на чтение (оптимально использовать папку `SYSVOL` вашего домена).
  3. Откройте консоль «Управление групповыми политиками» (gpmc.msc).
  4. Создайте новый объект групповой политики (GPO) и назовите его, например, «1C-Platform-AutoUninstall».
  5. Нажмите правой кнопкой мыши по созданному объекту и выберите пункт «Изменить».
  6. Перейдите по пути: Конфигурация компьютера -> Политики -> Конфигурация Windows -> Сценарии (запуск/завершение).
  7. Дважды кликните по пункту «Автозагрузка» (Startup). Нам нужно запускать скрипт именно при старте компьютера, так как в этот момент сценарии выполняются от имени системной учетной записи `SYSTEM`, которая обладает наивысшими правами на локальном ПК и легко обойдет ограничения UAC.
  8. В открывшемся окне перейдите на вкладку «Сценарии PowerShell».
  9. Нажмите кнопку «Добавить», укажите сетевой путь к вашему файлу сценария `UninstallOld1C.ps1` в папке `SYSVOL`.
  10. В поле «Параметры сценария» добавьте команду для обхода политики выполнения скриптов: -ExecutionPolicy Bypass.
  11. Примените политику к подразделению (OU), в котором находятся учетные записи компьютеров ваших пользователей.

Продвинутый сценарий: удаление с учетом анализа файла ibases.v8i

Иногда простого жесткого указания версии в переменной $KeepVersion недостаточно. Например, разные базы пользователей могут требовать разные версии платформы (одна база работает на старой 8.3.18, другая — на новой 8.3.23). В таком случае бездумное удаление «всего, кроме одного» нарушит работу пользователей.

Для решения этой проблемы продвинутые системные администраторы используют интеллектуальный анализ конфигурационного файла ibases.v8i, который хранится в профиле каждого пользователя по пути %APPDATA%\1C\1CEstart\ibases.v8i.

В данном файле содержатся параметры подключения ко всем информационным базам пользователя. Особый интерес для нас представляют строки конфигурации вида:


[ИмяИнформационнойБазы]
Connect=Srvr="Server1C";Ref="Base1";
...
Version=8.3.18.1334

Продвинутый PowerShell-скрипт перед запуском удаления может выполнять следующие действия:

  1. Скрипт сканирует папки профилей пользователей C:\Users\* и находит файлы ibases.v8i.
  2. С помощью регулярных выражений парсится параметр Version для каждой прописанной базы.
  3. Формируется динамический массив версий платформ, которые реально требуются пользователю для работы.
  4. Скрипт сопоставляет этот массив с фактически установленными в системе релизами 1С и производит безопасную деинсталляцию только тех версий платформы, которые гарантированно отсутствуют в настройках запуска баз всех пользователей данного компьютера.

Дополнительно рекомендуется настроить логирование работы скрипта. Вы можете добавить в PowerShell-скрипт вывод результатов работы (список удаленных версий, время начала и окончания процесса, ошибки прав доступа) в текстовый файл, сохраняемый в скрытую общую сетевую папку (например, `\\Server\Logs$\1C-Uninstall\`). Это позволит вам быстро проконтролировать процесс очистки всех 500 машин и оперативно выявить проблемные ПК.

← На главную