Добавить в корзинуПозвонить
Найти в Дзене
Типичный Админ

Автоматическое резервное копирование баз 1С Предприятие через RAS и PowerShell

В этой статье я поделюсь решением, которое использую для автоматического создания резервных копий информационных баз «1С:Предприятие» в клиент-серверном режиме. Я расскажу, как запустить службу RAS, как работает мой PowerShell-скрипт, и почему я вынес все настройки в обычный bat-файл.
Все скрипты, которые вы увидите ниже, были разработаны с помощью DeepSeek. Все компоненты проверены на реальном
Оглавление

В этой статье я поделюсь решением, которое использую для автоматического создания резервных копий информационных баз «1С:Предприятие» в клиент-серверном режиме. Я расскажу, как запустить службу RAS, как работает мой PowerShell-скрипт, и почему я вынес все настройки в обычный bat-файл.

Все скрипты, которые вы увидите ниже, были разработаны с помощью DeepSeek. Все компоненты проверены на реальном сервере, и я пошагово покажу путь от запуска RAS до получения dt-файлов с ротацией.

1. Вступление и постановка задачи

Передо мной стояла задача организовать регулярное резервное копирование нескольких баз 1С, развёрнутых на одном сервере. Я выбрал штатный механизм выгрузки в *.dt через конфигуратор. Требовалось:

  • автоматически, по расписанию, создавать dt‑файлы для каждой базы;
  • блокировать сеансы пользователей перед выгрузкой;
  • поддерживать ротацию — хранить только последние N копий;
  • работать с кодом разрешения блокировки (permission code);
  • сделать решение легко переносимым на несколько серверов.

В результате был сгенерирован PowerShell-скрипт, который выполняет всю логику, а параметры для каждого сервера задаются в bat‑файле. Ключевыми элементами стали служба RAS и утилита rac.exe.

2. Для чего нужна служба RAS

RAS (Remote Administration Server) — это компонент сервера 1С, предоставляющий интерфейс для удалённого администрирования кластера. Именно к нему обращается rac.exe, когда нужно получить список кластеров, баз, управлять блокировками и сеансами. Если служба RAS не запущена, автоматизация через rac.exe невозможна. Поэтому начинаю с того, что настраиваю и запускаю RAS на том же хосте, где работает агент сервера 1С. В моём примере агент слушает порт 1540, а RAS — 1545.

3. Запуск службы RAS

Этот bat-файл, который формирует команду запуска, пересоздаёт службу Windows и стартует её. Вот он:

@echo off
:: ============================================
:: Настройки
:: ============================================
:: Версия платформы
set Ver1C=8.3.27.1936
:: Путь к bin (добавлен обратный слеш)
set BinDir=C:\Program Files\1cv8\%Ver1C%\bin
:: Пользователь службы
set SrvUserName=.\USR1CV8
set SrvUserPwd=123mypass
:: Порты
set CtrlPort=1540
set RASPort=1545
set MonitorPort=1555
:: Агент на этой же машине
set AgentName=localhost
:: Имя службы (с пробелами – будем кавычить везде)
set SrvcName=1C:Enterprise 8.3 Remote Server %CtrlPort% %Ver1C%
:: ============================================
:: Формирование команды запуска
:: ============================================
:: Экранируем путь к ras.exe (он содержит пробелы) и все аргументы
set "BinPath=\"%BinDir%\ras.exe\" cluster --service --port=%RASPort% %AgentName%:%CtrlPort% --monitor-port=%MonitorPort%"
:: ============================================
:: Пересоздание службы
:: ============================================
echo Stopping old service...
sc stop "%SrvcName%" 2>nul
echo Deleting old service...
sc delete "%SrvcName%" 2>nul
timeout /t 2 >nul
echo Creating new service...
sc create "%SrvcName%" binPath= "%BinPath%" start= auto obj= "%SrvUserName%" password= %SrvUserPwd% DisplayName= "%SrvcName%"
echo Starting service...
sc start "%SrvcName%"
echo.
echo ===== DONE =====
pause

Запускаю его с правами администратора, предварительно подставив свои значения версии платформы, учётной записи и портов. После этого служба работает постоянно, обеспечивая доступ для rac.exe.

4. Архитектура bat + ps1 и алгоритм резервного копирования

4.1. Почему я разделил bat и PowerShell

Скрипт на PowerShell (backup_1c.ps1) содержит всю логику: поиск кластера, блокировку, выгрузку, ротацию. Все параметры (сервер, список баз, учётные данные, путь к rac.exe и т.д.) он принимает через аргументы командной строки. Чтобы не редактировать длинный ps1-файл для каждого сервера, был создан bat-файл, в котором задаются переменные и вызывается PowerShell. Такой подход даёт мне ряд преимуществ:

  • Один и тот же backup_1c.ps1 использую для любого количества серверов — достаточно создать bat с нужными настройками.
  • Все параметры собраны в одном месте, их легко менять.
  • Планировщик задач Windows запускает bat-файл без лишних сложностей.

4.2. Как работает скрипт

1. Скрипт подключается к RAS и определяет GUID кластера по порту агента (например, 1541). RAS-порт вычисляется автоматически: clusterPort + 4.

2. Для каждой базы из списка, разделённого запятыми:

  • ищется GUID базы в кластере;
  • проверяется свободное место на диске (оценка делается по размеру предыдущего dt‑файла, а для новой базы резервируется 3 ГБ);
  • включается блокировка сеансов с заданным кодом разрешения (регламентные задания тоже приостанавливаются);
  • все активные сессии принудительно завершаются;
  • через 1cv8.exe DESIGNER с ключом /UC и кодом разрешения выполняется выгрузка dt‑файла;
  • блокировка снимается;
  • старые dt‑файлы удаляются, остаётся только заданное в KEEP_COUNT количество последних копий.

3. Все действия протоколируются в backup.log, который лежит в папке с бэкапами.

Код разрешения — это пароль, который задаётся при настройке блокировки. Пользователи, знающие его, могут войти в заблокированную базу (например, я, чтобы сделать выгрузку). В скрипте этот код используется и для блокировки, и для снятия, и в ключе /UC.

5. Полный код моего решения

Оба файла сгенерированы с помощью DeepSeek. Ниже привожу их полностью.

5.1. PowerShell-скрипт backup_1c.ps1

Его можно посмотреть, скачав от сюда:

Автоматическое резервное копирование баз 1С Предприятие через RAS и PowerShell — Яндекс Диск

ибо Дзен сильно искривляет отступы в коде, читать код неудобно.

5.2. Bat-файл для запуска

@echo off
setlocal EnableExtensions
:: ========== SETTINGS ==========
set ONEC_SERVER=localhost:1541
set BACKUP_PATH=D:\1C_Backups
set KEEP_COUNT=5
set IB_USER=backup
set IB_PASS=123mypass
set BASES=test-buh,zup-test,buhtest1
set RAC_PATH=C:\Program Files\1cv8\8.3.27.1936\bin\rac.exe
set PERMISSION_CODE=12345679
:: ==============================
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0backup_1c.ps1" ^
-OneCServer "%ONEC_SERVER%" ^
-Bases "%BASES%" ^
-BackupPath "%BACKUP_PATH%" ^
-KeepCount %KEEP_COUNT% ^
-InfobaseUser "%IB_USER%" ^
-InfobasePassword "%IB_PASS%" ^
-RacPath "%RAC_PATH%" ^
-PermissionCode "%PERMISSION_CODE%"

Поясню, что задаётся в bat-файле:

  • ONEC_SERVER — адрес агента сервера 1С в формате хост:порт. Именно этот порт (1541) используется для поиска кластера, а порт RAS вычисляется как порт + 4 (т.е. 1545).
  • BASES — имена баз в кластере, разделённые запятыми.
  • BACKUP_PATH — каталог для бэкапов и лога.
  • KEEP_COUNT — сколько последних копий оставлять.
  • IB_USER и IB_PASS — учётная запись с правами администратора базы для выполнения выгрузки.
  • RAC_PATH — полный путь к rac.exe, должен соответствовать версии платформы на сервере.
  • PERMISSION_CODE — код разрешения блокировки, который я установил. Он же используется в /UC при запуске конфигуратора.

6. Как я развернул и запустил всё по расписанию

  1. Сначала запустил bat-файл для создания службы RAS и убедился, что она работает.
  2. Создал папку C:\1C_Backup_Scripts, поместил туда backup_1c.ps1 и run_backup.bat. Они должны лежать вместе в одном каталоге.
  3. Убедился, что учётная запись, от которой работает планировщик, имеет доступ к rac.exe, право на выполнение PowerShell и запись в D:\1C_Backups.
  4. В планировщике Windows создал задачу: запуск cmd.exe /c "C:\1C_Backup_Scripts\run_backup.bat" с ежедневным расписанием (например, в 2:00 ночи).
  5. Для другого сервера 1С я просто сделал копию bat-файла, исправил в нём параметры ONEC_SERVER, RAC_PATH, BASES и т.д., а ps1-скрипт остался тем же.

7. Заключение

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

  • Полная автоматизация с корректной блокировкой и завершением сессий.
  • Единый PowerShell-скрипт, не требующий правок при добавлении новых серверов — все настройки вынесены в bat-файлы.
  • Безопасная работа с блокировками благодаря коду разрешения: база выгружается, когда она закрыта для обычных пользователей.
  • Ротация копий не даёт бесконтрольно расти занимаемому месту.
  • Подробный лог помогает быстро найти причину, если что-то пошло не так.

Донаты принимаются на кошельки:

Yoomoney:

4100118091867315

Карта Т-Банк (бывший Тиньков):

2200 7017 2612 2077

Карта Альфа-Банк:

2200 1539 1357 2013