Резервное копирование баз 1С из командной строки powershell
Поскольку целесообразнее делать резервные копии на любой другой жесткий диск, а лучше сетевое хранилище — первым делом подключается сетевая папка, но можно и в любое другое место — тогда первые 2 строки и последняя не нужны. Пара логин1 и пароль1 — для доступа к сетевой папке куда будут сделаны выгрузки информационных баз 1С с сервера 1С Предприятия. $ints — перечень названий информационных баз на сервере 1С. Каждое название должно в точности соответствовать названию в 1С сервере и написано в кавычках. $date — Текущая дата.
Далее идет консольная команда для конфигуратора, запускаемая из командной строки:
C:\8.3.4.389\bin\1cv8.exe CONFIG /S abc\$i /N логин2 /P пароль2 /DumpIB Z:\1с83 $i $date.dt
C:\8.3.4.389\bin\1cv8.exe — требуется точный путь к текущей версии клиента 1с предприятия
CONFIG /S abc\$i — подключение в режиме конфигуратора к кластеру 1с предприятия с названием abc к каждой базе $i по очереди из списка $ints
/N»»логин2″» /P»»пароль2″» — пользователь в информационной базе, имеющий права на выгрузку, лучше если будет пользователь с полными правами, но непоказывающийся в списке
/IBCheckAndRepair -ReIndex -IBCompression — перед выгрузкой базы производится реиндексирование (ускоряет работу базы) и компрессия (уменьшает размер базы)
/DumpIB»»Z:\$i $date.dt — выгружает базу в папку под именем «название базы текущая дата.dt
net use Z: /delete /y — отключает подключаемую сетевую папку.
$Z = New-Object -ComObject WScript.Network
$Z.MapNetworkDrive( "T:", "\\имя_компьютера\сетевая_папка", "true", "логин1", "пароль1" )
$ints = @(
"База1","База 2","base3","base_4")
foreach ($i in $ints)
{
$date = (Get-Date -UFormat "%Y-%m-%d")
&cmd /c "C:\8.3.4.389\bin\1cv8.exe CONFIG /S""abc\$i"" /N""логин2"" /P""пароль2"" /IBCheckAndRepair -ReIndex -IBCompression"""
&cmd /c "C:\8.3.4.389\bin\1cv8.exe CONFIG /S""abc\$i"" /N""логин2"" /P""пароль2"" /DumpIB""Z:\1с83 $i $date.dt"""
}
&cmd /c "net use Z: /delete /y"
Делал аналогичный скрипт, пара замечаний:
— чтобы не править каждый раз текст, базы, пути, пароли лучше вынести и передавать либо через параметры, либо файлом
— команды выгрузки и сжатия/индексирования базы лучше поменять местами, ибо в случае проблем можно потерять базу, причем сжатие делать только после удачной выгрузки
— через некоторое время папочка Z:\1c83 станет очень большой, лучше всего хранить ежедневные копии за месяц, например, а с началом нового оставлять от позапрошлого только копии от понедельника, например, или от 1го числа.
— работать будет далеко не всегда — если работают пользователи или выполняются задачи по расписанию, выгрузить базу не получится — собственно, из-за этого сюда и попал — искал способ управления консолью сервера 1С из powershell, чтобы на время копирования выгнать пользователей и запретить регламентные задачи.
Да, все верно.
Со временем перешел с файловых баз на серверное решение 1С + MS SQL и уже бекап делаю там во время цикла обслуживания. Быстрее и не мешает работе пользователей вообще.