При администрировании крупных сетей (от 50 и более рабочих станций) системные администраторы 1С неизбежно сталкиваются с проблемой накопления старых версий платформы «1С:Предприятие». Каждое обновление оставляет в системе каталог предыдущего релиза. Со временем десятки гигабайт мусора забивают системные диски пользователей, вызывая дефицит свободного места и путаницу при запуске баз. Удалять эти папки вручную на 500 машинах — задача нереалистичная.
В этой статье мы подробно разберем, как правильно и безопасно автоматизировать процесс очистки компьютеров пользователей от неиспользуемых релизов платформы 1С. Мы рассмотрим стандартные механизмы деинсталляции, напишем надежный скрипт на PowerShell, разберем интеграцию с групповыми политиками (GPO) и укажем на критические ошибки, которые могут нарушить работоспособность операционной системы.
Среди начинающих администраторов часто встречается совет: просто очистить содержимое каталога C:\Program Files\1cv8\ или C:\Program Files (x86)\1cv8\, оставив только папку с последним релизом. Это крайне грубый и опасный метод!
Рассмотрим подробнее, к чему приводит ручное удаление каталогов программ:
1cestart.exe может потерять связь с зарегистрированными библиотеками и типами файлов, из-за чего ярлыки баз перестанут открываться.Единственно правильный способ удаления — использование штатных механизмов деинсталляции Windows Installer через командную строку или специализированные скрипты.
Для удаления конкретной версии платформы можно использовать штатный инструмент 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
Однако хранить на сервере десятки старых дистрибутивов ради удаления — неэффективно. Поэтому мы перейдем к более гибким и современным решениям.
Для очистки 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 является актуальной и будет сохранена."
}
}
Давайте разберем по шагам, как работает этот скрипт:
$KeepVersion, содержащую номер релиза платформы, который должен остаться на компьютере пользователя.Uninstall для 64-битных и 32-битных программ.UninstallString.Start-Process инициируется фоновый запуск деинсталлятора msiexec.exe с ключами /qn (полная тишина без диалоговых окон) и /norestart (запрет перезагрузки ПК во время работы скрипта). Параметр -Wait гарантирует, что скрипт не начнет удалять следующую версию, пока не завершится удаление текущей.Если в вашей организации используется современная платформа версии **8.3.24** и выше, фирма «1С» предлагает штатный автоматический функционал деинсталляции устаревших платформ силами самого клиента запуска.
Рассмотрим подробнее настройки этого механизма:
1cv8s).Важный нюанс: Этот способ имеет существенное ограничение. Процесс удаления запускается от имени текущего пользователя ОС. Если у рядового сотрудника на его рабочем компьютере отсутствуют права локального администратора (что является стандартом безопасности в крупных сетях), операционная система заблокирует удаление через механизм контроля учетных записей (UAC). Таким образом, для 500 машин этот метод применим только в том случае, если пользователи работают с правами администратора, либо на терминальных серверах.
В старых инструкциях часто рекомендуют использовать одну простую строку в cmd-файле для удаления через консоль WMI:
wmic product where "name like '1CEnterprise%'" call uninstall
Внимание! Начиная с Windows 11 версии 24H2 и Windows Server 2025, корпорация Microsoft полностью удалила компонент `WMIC` из состава операционной системы. Попытка выполнить данный скрипт на современных клиентских машинах приведет к ошибке командной строки и полному игнорированию процесса удаления. Полностью откажитесь от использования утилиты `wmic` в пользу PowerShell-скриптов, работающих напрямую с реестром.
Чтобы запустить созданный нами PowerShell-скрипт на всех 500 компьютерах организации, воспользуемся контроллером домена Active Directory и механизмом групповых политик.
Разберем этот процесс по шагам:
Конфигурация компьютера -> Политики -> Конфигурация Windows -> Сценарии (запуск/завершение).-ExecutionPolicy Bypass.Иногда простого жесткого указания версии в переменной $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-скрипт перед запуском удаления может выполнять следующие действия:
C:\Users\* и находит файлы ibases.v8i.Version для каждой прописанной базы.Дополнительно рекомендуется настроить логирование работы скрипта. Вы можете добавить в PowerShell-скрипт вывод результатов работы (список удаленных версий, время начала и окончания процесса, ошибки прав доступа) в текстовый файл, сохраняемый в скрытую общую сетевую папку (например, `\\Server\Logs$\1C-Uninstall\`). Это позволит вам быстро проконтролировать процесс очистки всех 500 машин и оперативно выявить проблемные ПК.