Не выкидывает всех из баз VBS #782652


#0 by udarnic77
Приветствую уважаемый форум! Задача - еженочная выгрузка аз в DT. Есть скрипт на VBS, который успешно задачу выполняет на различных базах (в том числе полностью самописных программистом). Но, с некоторых пор (подозрение на обновление платформы до версии 8.3.8.1747) некоторые клиенты остаются подключенными и, соответственно, выгрузка не выполняется из-за невозможности установить монопольное соединение. Если выкинуть оставшихся клиентов руками в консоли администрирования сервера - скрипт отрабатывает. Тело скрипта такое: [code] BasesList = "c:scriptackupases_to_backup.txt"   'Cписок баз, одна строка - одна база ' Например: ' base1         If Len(Trim(iString)) <> 0 Then Call ArcBackups(iString)     Loop While Not Fstring.AtEndOfStream     Fstring.Close Sub ArcBackups(BaseName) 'имя пользователя базы 1С:Предприятия UserName = "root" 'пароль пользователя базы 1С:Предприятия UserPass = "password" 'имя сервера 1С:Предприятия ServerName = "srv2" 'имя базы 1С:Предприятия к которой подключаемся BaseName получаем как аргумент ' Код доступа к базе, нужен для доступа к ЗАБЛОКИРОВАННОЙ для новых подключений базе LockPermissionCode = "123456" ' BckpDir - папка назначения, куда будем складывать выгрузки BckpDir = "\BackupBackup_1CDT"& BaseName &"" ' LogDir - папка куда будет писаться лог выгрузки и обновления LogDir = "\BackupBackup_1CDT"& BaseName &"log" LockMessageText = "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ И ОБНОВЛЕНИЕ." Dim j 'Перебираем все процессы в кластере For j = LBound(Processes) To UBound(Processes)     Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(j)     'Проверяем на наличие остановленых процессов         For Each InfoBase In InfoBases             ' Ищем нужную базу             If UCase(InfoBase.Name) = UCase(BaseName) Then                 ' Устанавливаем запрет на подключение новых соединений                 ' Запрет действует 15 минут, если скрипт не отработает нормально Next ''''''''''''''''''''''''''''' 'проверяем существование папки для бэкапа и, если ее нет, создаем If Not objFSO.FolderExists(strDirectory) Then End If ' проверяем существование папки для лога и, если ее нет, создаем If Not obj2FSO.FolderExists(str2Directory) Then 'Задаем формат имени файла бэкапа База_Дата_Час_Минута_ИмяСервера FileName = BaseName & "_" & DateValue(date) & "_" & Hour(Now) & "_" &  Minute(Now) & "_" & ServerName ' запуск выгрузки с ожиданием ее завершения oWshShell.Run strComm, 0, true ' запуск обновления с ожиданием его завершения ' oWshShell.Run strComm2, 0, true ' Отключаем блокировку базы InfoBases  = WorkingProcessConnection.GetInfoBases For Each InfoBase In InfoBases     ' Ищем нужную базу     If UCase(InfoBase.Name) = UCase(BaseName) Then         ' Отключаем запрет на подключение новых соединений [/code]
#1 by Armando
Надо удалять сеансы, а не соединения
#2 by udarnic77
Пожалуйста, подскажите как это сделать в VBS
#3 by Armando
вот кусок моего скрипта     For Each SessionInfo in AgentConnection.GetInfoBaseSessions(ClusterInfo, InfoBaseShort)         If Not SessionInfo.AppID = "COMConsole" Then
#4 by udarnic77
Можете показать весь скрипт, пожалуйста!
#5 by Armando
#6 by udarnic77
Спасибо. Мой скрипт более "линейный", а знаний в VBS пока не хватает, чтобы вписать в свой скрипт разрыв всех сеансов к определенной базе. Буду очень благодарен если кто-то поможет вписать...
#7 by Armando
Скорее всего этот скрипт писался для старых версий платформы, когда еще не было понятия Сеанс. Тут не просто вписать, а переписать скрипт надо с сохранением логики. В твоем скрипте идет перебор соединений в каждом рабочем процессе, с разрывом соединения. А надо перебирать сеансы кластера и удалять подходщие по условию.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С