Полуавтоматическое обновление 1С посредством PowerShell

Прошу не кидать камни, первая публикация.
Итак, если вкратце: баз много, времени на обновление тратится безумно много. Решил автоматизировать часть работы посредством 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)

7 Comments

  1. CheBurator

    Рнабираем в яндексе

    Обновлятор 1с

    Reply
  2. virix

    (1) CheBurator, Да, да, теперь нашел. Перед тем как что-то писать изучал рынок, не нашел этого продукта 🙁

    Reply
  3. Stim213

    каждый одинесник, у которого более 5 баз пишет свой скрипт для обновления

    Reply
  4. Созинов

    Спасибо, может и пригодиться.

    Reply
  5. virix

    (4) Созинов, Пожалуйста)

    Reply
  6. Evil Beaver

    триста тридцать пять…

    Reply
  7. Evil Beaver

    (3) Stim213,

    каждый одинесник, у которого более 5 баз пишет свой скрипт для обновления

    .. а должен бы уже установить наконец билд-сервер!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *