Скрипт работает очень просто. За вас автоматически авторизуется на кластере серверов и отключает всех пользователей базы. После чего делается бэкап данных.
Для работы скрипта необходимо зарегистрировать библиотеку ComCntr.dll (Для инициализации объекта V82.Comconnector). Для Windows server 2008 необходимо зарегистрировать COM+ компоненту на основе этой библиотеки.
Скрипт рекомендуется повесить в рассписание сервера.
Ниже приводится пример скрипта (.VBS) для двух баз - зарплаты и бухгалтерии.
'Скопируйте этот скрипт в текстовый файл txt и поменяйте расширение на VBS
'Скрипт выгодняет принудительно пользователей из базы данных посредством подключения к кластеру серверов
'После того как будут выгнаны все пользователи, делается резервное копирование в папку "D:\1c_backup\"
'Сохраненные файлы датируются текущей датой, неактуальные копии НЕ УДАЛЯЮТСЯ
'Процедура закрытия соединений. Создастся служебные пользователи администратора COM.По завершении процедуры они убьются сами
Sub CloseConnection()
Dim Connector, Agent, Cluster, WorkProcess, WorkProcessConnection, Base, Connections, i, CurrentConnection
Dim BaseList
'Идентификаторы баз в кластере серверов
BaseName = "zarp"
BaseNameAcc = "buhg"
Set Connector = CreateObject("V82.COMConnector")
'Селект текущего кластера серверов
Set Agent = Connector.ConnectAgent("127.0.0.1")
Set Cluster = Agent.GetClusters()(0)
Agent.Authenticate Cluster, "aleksei", "7344"
'Получение рабочего процесса кластера
For Each WorkProcess In Agent.GetWorkingProcesses(Cluster)
ConnectString = WorkProcess.HostName & ":" & WorkProcess.MainPort
Set WorkProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
'Установка аутентификации в базах. В бухгалтерии и зарплате создан логин "Алексей"
WorkProcessConnection.AddAuthentication "Алексей", "tystik1233"
'Получение списков баз на сервере
BaseList = WorkProcessConnection.GetInfoBases()
'Отключение пользователей из Зарплаты
For i = LBound(BaseList) To UBound(BaseList)
If BaseList(i).Name = BaseName Then
Set Base = BaseList(i)
'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт
Connections = WorkProcessConnection.GetInfoBaseConnections(Base)
For j = LBound(Connections) To UBound(Connections)
Set CurrentConnection = Connections(j)
If CurrentConnection.AppID <> "COMConsole" Then
'MSGBOX "Пользователь зарплаты : " & CurrentConnection.UserName
WorkProcessConnection.Disconnect CurrentConnection
End If
Next
End If
'Отключение пользователей из бухгалтерии
If BaseList(i).Name = BaseNameAcc Then
Set Base = BaseList(i)
'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт
Connections = WorkProcessConnection.GetInfoBaseConnections(Base)
For l = LBound(Connections) To UBound(Connections)
Set CurrentConnection = Connections(l)
If CurrentConnection.AppID <> "COMConsole" Then
'MSGBOX "Пользователь бухгалтерии : " & CurrentConnection.UserName
WorkProcessConnection.Disconnect CurrentConnection
End If
Next
End If
Next
Next
End Sub
'Резервная копия, создается файл *.dt по формату ПрефиксБазы_+ТекущаяДата.dt
Sub BackUp()
'Папка архив
Dim Folder
Dim FileNameSalary
Dim FileNameAcc
Dim WSShell
Folder = """D:\1c_backup\"
'Создание шела для выполнения команд windows
Set WshShell = Wscript.CreateObject("Wscript.Shell")
'Копирование зарплаты
FileNAmeSalary = Folder & "salary\Salary_" & Date() & ".dt"""
CmdLine = """C:\Program Files (x86)\1cv82\8.2.17.143\bin\1cv8.exe"" DESIGNER /S ""127.0.0.1\zarp"" /N ""Алексей"" /P ""tystik1233"" /DUMPIB " & FileNameSalary
WshShell.Run CmdLine, 1, True
'MSgBox CmdLine
'копирование бухгалтерии
FileNameAcc = Folder & "acc\Acc_" & Date() & ".dt"""
CmdLine = """C:\Program Files (x86)\1cv82\8.2.17.143\bin\1cv8.exe"" DESIGNER /S ""127.0.0.1\buhg"" /N ""Алексей"" /P ""tystik1233"" /DuMPIB " & FileNameAcc
WshShell.Run CmdLine, 1, True
'MsgBox CmdLine
End Sub
'# Основной модуль работы программы, сначала выгоняются юзеры, потом делаются бэкапы
CloseConnection
BackUp