Блокировка подключения к 1с средствами VBS.

Установка блокировки доступа к безе и сброс подвисших соединений.

Файл 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/2024 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 & »
ootcimv2″)
        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()

//———————————————————————————

Leave a Comment

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