Имя: Пароль:
1C
1С v8
Скрипт для отключения пользователей. Проблема.
,
0 Menjoy
 
04.10.12
11:56
Добрый день.
Использую такой скрипт для отключения пользователей на сервере, но отрабатывает он через раз. Часто остаются активные сеансы, 1 - 2 сеанса.
В чем ошибка?

UserName = "robot"
UserPass = "password"
ServerName     =     "192.168.1.67"
BaseName    =    "BaseName"
Dim Connector
Dim AgentConnection
Dim Cluster
Dim WorkingProcess
Dim WorkingProcessConnection
Dim ibDesc
Dim connections
Dim ConnectString

Set connector = CreateObject("V82.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
WorkingProcessConnection.AddAuthentication UserName, UserPass
Set ibDesc = WorkingProcessConnection.CreateInfoBaseInfo()
ibDesc.Name = BaseName
Connections = WorkingProcessConnection.GetInfoBaseConnections(ibDesc)

Dim i
Dim Connection
Dim RobotConnection
For i = LBOUND(Connections) To UBound(Connections)
Set Connection = Connections(i)
If Connections(i).userName <> "robot" then
WorkingProcessConnection.Disconnect Connection
end if
If Connections(i).userName = "robot" then
set RobotConnection = Connection
end if
Next
WorkingProcessConnection.Disconnect RobotConnection
1 Fragster
 
гуру
04.10.12
12:02
бывает такое...
2 Fragster
 
гуру
04.10.12
12:02
из консоли они тоже, наверное, не срубаются
3 Menjoy
 
04.10.12
12:03
В том-то и дело, что такое "бывает" очень часто. На сегодняшний день последний бекап только от 27 сентября.
4 Menjoy
 
04.10.12
12:04
Ставил абсолютно всем пользователям системы в фоновое задание

ЗавершениеРаботыСистемы(Ложь);

но и оно почему-то ни у кого не срабатывает, но это, как я вижу, единственный выход.
5 shuhard
 
04.10.12
12:23
(0) работает как часы, хотя мне dt нафиг и не нужны:
НомерСоединения=0;
   Пользователь=ПараметрыЗапуска[2];
   Пароль=ПараметрыЗапуска[3];
   Попытка
       СтрокаСоединения=СтрокаСоединенияИнформационнойБазы();
       ЭтоСоединение=НомерСоединенияИнформационнойБазы();
       База=ПараметрыЗапуска[1];
       КОМ=Новый COMОбъект("V82.COMConnector");
       Сервер=ПараметрыЗапуска[0];
       Агент=КОМ.ConnectAgent(Сервер);
       Кластеры=Агент.GetClusters();
       Кластер=Кластеры.GetValue(0);
       Агент.Authenticate(Кластер,"","");        
       РабочиеПроцессы=Агент.GetWorkingProcesses(Кластер);
       // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       Для Каждого Процесс Из РабочиеПроцессы Цикл
           СтрокаСоединенияРП=Процесс.HostName+":"+Формат(Процесс.MainPort,"ЧГ=");
           СоединениеРП=КОМ.ConnectWorkingProcess(СтрокаСоединенияРП);
           СоединениеРП.AddAuthentication(Пользователь,Пароль);
           ОписаниеИБ=СоединениеРП.CreateInfoBaseInfo();
           ОписаниеИБ.Name=База;
           Соединения=СоединениеРП.GetInfoBaseConnections(ОписаниеИБ);
           Для Каждого Соединение Из Соединения Цикл
               Если Соединение.AppID="COMConsole" Тогда
                   Продолжить;
               КонецЕсли;
               Если Соединение.ConnID<>ЭтоСоединение Тогда
                   СоединениеРП.Disconnect(Соединение);  // всех кроме себя
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
       КОМ=Неопределено;
       ЗавершитьРаботуСистемы(Ложь);
   Исключение
       //Сообщить(ОписаниеОшибки());
   КонецПопытки;
6 Maxus43
 
04.10.12
12:25
бэкапы в виде Dt - моветон... бэкап скулем наше всё
7 Fragster
 
гуру
04.10.12
12:26
(3) блиииин.... бэкапь скулем и вообще не парься...
8 Menjoy
 
04.10.12
23:37
(5) Спасибо за пример, буду пробовать.
(7) SQL бэкап базы у клиентов весит порядка 15 Гб, сжатый 1,7 Гб - многовато для их дохлой удаленки.
*.dt в 700 Мб и то долго скачивается.
9 shuhard
 
04.10.12
23:52
(8)[SQL бэкап базы у клиентов весит порядка 15 Гб, сжатый 1,7 Гб ]
перевести базу в симпл и делать вместо полного бэкапа дифференциальные
10 Menjoy
 
05.10.12
00:07
(9) Я понимаю, что можно сделать полноценный бекап через SQL. Но есть еще небольшая проблема - админских прав на SQL у меня нет, сис. администратор предприятия их не выдаст, а сам сделает если только через большой промежуток времени...
11 Menjoy
 
05.10.12
00:07
(9) Если бы не небольшие проблемы - не искал бы сложных путей.
Спасибо.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс