Файл VBScript для установки блокировки доступа пользователей к базе 1с для проведения плановых работ. Данный скрипт устанавливает блокировку подключений без ключа "/UC" и делает перезапуск службы агента 1с для сброса подвисших соединений.
После проведения данных действий, можно проводить обслуживание базы запустив 1с с ключем "/UC" где в качестве кода указать код установленный в настройках скрипта.
По истечении времени блокировки, доступ к базе будет открыт.
//---------------------------------------------------------------------------------
' VBScript Blocked1cForBackUp.vbs
' Sample script to Blocked 1c and Stop or Start a Service
' [url]www.computerperformance.co.[/url]
' Created by Lex 21/07/2016 Version 1.0
' -------------------------------------------------------'
Sub RestartService
Dim objWMIService, objItem, objService
Dim colListOfServices, strComputer, strService, intSleep
strComputer = "."
intSleep = 15000 ' Время между остановкой и запуском службы
' Имя службы которую необходимо перезапустить
strService = " '1C:Enterprise 8.2 Server Agent (x86-64)' "
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name ="_
& strService & " ")
For Each objService in colListOfServices
objService.StopService()
WSCript.Sleep intSleep
objService.StartService()
Next
End Sub
Sub BlockedConnect
Dim Connector,AgentConnection,Cluster,WorkingProcess,WorkingProcessConnection,ibDesc,connections,ConnectString
NameLogFile = "monopoly.log" 'Имя Log файла
'Установим путь к лог файлу как и путь запуска скрипта
Out=Replace(WSH.ScriptFullName, WSH.ScriptName, NameLogFile )
Set fs = CreateObject("Scripting.FileSystemObject")
Set OutFile = fs.OpenTextFile(Out, 8, True)
'Указываем имя пользователя с правами доступа к консоли
AdminName = "Администратор"
'Указываем пароль
UserPass = "Пароль"
'Укажем IP Сервера с базами 1c
ServerName = "192.168.1.11"
'Укажем Имя базы
BaseName = "Test"
WScript.Quit (0)
Set Connector = CreateObject("V82.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
For Each WorkProcess In AgentConnection.GetWorkingProcesses(Cluster)
ConnectString = WorkProcess.HostName & ":" & WorkProcess.MainPort
Set WorkProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
WorkProcessConnection.AddAuthentication AdminName, UserPass
BaseList = WorkProcessConnection.GetInfoBases()
For i = LBound(BaseList) To UBound(BaseList)
If BaseList(i).Name = BaseName Then
Set Base = BaseList(i)
Connections = WorkProcessConnection.GetInfoBaseConnections(Base)
LockMessageText = vbCrLf + "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ!" + vbCrLf + " ВРЕМЯ ОЖИДАНИЯ ОКОЛО 5 - 10 МИНУТ."
LockPermissionCode = "Kod" ' Код блокировки базы
test=WorkProcessConnection.GetInfoBases()
Base.ConnectDenied = True
Base.DeniedFrom = CStr(Now())
Base.DeniedTo = CStr(Now() + 1/300)
Base.DeniedMessage = LockMessageText
Base.PermissionCode = LockPermissionCode
OutFile.WriteLine(CStr(Now) + " Установлено сообщение для пользователей: "+LockMessageText)
OutFile.WriteLine(CStr(Now) + " Установлен код доступа " + LockPermissionCode)
OutFile.WriteLine(CStr(Now) + " Установлена блокировка с "+CStr(Base.DeniedFrom)+" по "+ CStr(Base.DeniedTo))
WorkProcessConnection.UpdateInfoBase(Base)
OutFile.Close()
End If
Next
Next
End Sub
On Error Resume Next
BlockedConnect()
RestartService()
//---------------------------------------------------------------------------------