Итак, если вкратце: баз много, времени на обновление тратится безумно много. Решил автоматизировать часть работы посредством Powershell. Кому будет полезно, буду рад 🙂
Ниже описан алгоритм работы скрипта и пояснения к нему.
Алгоритм работы следующий:
1. Бэкапим базу
Для бэкапа используем запуск 1С из командной строки. В командной строке передаем путь к базе, в нашем случае база клиент-серверная, передаем имя сервера 1С и алиас базы на этом сервере, в случае если база файловая, то путь к папке с базой. Далее имя пользователя и пароль пользователя с правами администратора. Ключ /DumpIB говорит о том что базу нужно выгрузить. За место выгрузки и имя файла с базой отвечают переменные $WhereSaveDT и $ArchiveName соответственно. Так же нам нужен лог файл куда 1С пишет результаты выполнения операции.
2. Если забэкапили успешно, начинаем обновлять
В случае, когда процесс отвечающий за бэкап базы вернул 0, т.е. выполнен бэкап без ошибок мы начинаем обновлять базу. Так же формируем строку из параметров, в целом они теже что и при бэкапе базы, отличие в ключе /UpdateCfg — ключ говорит о необходимости открыть базу и выполнить обновление. Так же тут важно значение переменной $ActualUpdateDir, в этой переменной содержится путь к папке с файлом обновления — 1cv8.cfu
3. Если не забэкапили, то пишем лог, и переходим к следующей базе.
Ну тут просто, если процесс, запускающий бэкап вернул значение отличное от 0, то базу не обновляем.
Так же, если по какой-то причине база не была обновлена, это можно сделать этим же скриптом, просто указав порядковый номер этой базы в переменной $count=0 и переменную $SelectedBase выставив в 0. Учитывайте, переменная $Path — массив, счет идет с нуля. Т.е. если нам нужно обновить вторую по порядку базу, то переменной $count нужно присвоить значение 1
#Скрипт для бэкапа и обновления бухгалтерии 8.2
#С проверкой выполнения бэкапа
$Alias=’База1′,’База2′
$Soft=’C:Program Files (x86)1cv828.2.19.90in1cv8.exe’
$ActualUpdateDir = ‘\С: mplts1cAccounting2_0_64_37’
$WhereSaveDT=’C:UsersUserDesktopArchivesAccounting’
$Arg=»
$Path='»1CБаза1″‘,'»1CБаза2″‘
$Username=’Администратор’,’Администратор’
$Password=’123456′,’123456′
$count=0
#В случае, если count=n и SelecetdBase=0 — Обновляем все базы по списку начиная с базы с индексом n
#В случае, если count=n и SelecetdBase=1 — Обновляем только базу с индексом n
$count=0;
$SelectedBase=0;
if($SelectedBase -ne 1 ) {$LoopNum = $Alias.Count;}
Else {$LoopNum = $count;}Do
{
#Формируем имя файла для архива, состоит из даты и имени базы
$ArchiveName = Get-Date -Format d
$ArchiveName +=$Alias[$count]
#Формируем строку аргументов для запуска бэкапа базы
$Arg = «CONFIG /S» + $Path[$count] + » /N » + $Username[$count] + » /P » + $Password[$count]
$Arg += » /DumpIB » + $WhereSaveDT + $ArchiveName + «.dt» + » /Out » + $WhereSaveDT+$ArchiveName + «.txt » + «-NoTruncate»
$ps = new-object System.Diagnostics.Process
$ps.StartInfo.Filename = $Soft
$ps.StartInfo.Arguments = $Arg
$ps.StartInfo.RedirectStandardOutput = $True
$ps.StartInfo.UseShellExecute = $false
#Запускает процесс
$ps.start()
$ps.WaitForExit()
If($ps.ExitCode -eq 0) {
$ps.Close()
#Формируем строку аргументов для запуска обновления базы
$Arg = «CONFIG /S» + $Path[$count] + » /N » + $Username[$count] + » /P » + $Password[$count]
$Arg += » /UpdateCfg » + $ActualUpdateDir + «1cv8.cfu /UpdateDBcfg /Out » + $WhereSaveDT+$ArchiveName + «.txt » + «-NoTruncate»
$ps = new-object System.Diagnostics.Process
$ps.StartInfo.Filename = $Soft
$ps.StartInfo.Arguments = $Arg
$ps.StartInfo.RedirectStandardOutput = $True
$ps.StartInfo.UseShellExecute = $false
#Запускает процесс
$ps.start()
$ps.WaitForExit()
$ps.Close()
}
Else {$ps.Close()}
$count+=1
$ArchiveName=»
} While ($count -lt $LoopNum)
Рнабираем в яндексе
Обновлятор 1с
(1) CheBurator, Да, да, теперь нашел. Перед тем как что-то писать изучал рынок, не нашел этого продукта 🙁
каждый одинесник, у которого более 5 баз пишет свой скрипт для обновления
Спасибо, может и пригодиться.
(4) Созинов, Пожалуйста)
триста тридцать пять…
(3) Stim213,
.. а должен бы уже установить наконец билд-сервер!