Вопрос!!! Определение запущенного сеанса 1С с помощью скрипта
Добрый день.
База SQL.
Терминальный доступ.
Есть следующая задача: необходимо с помощью скрипта определять запущен ли сеанс под определенным пользователем 1С, т.е. к примеру есть пользователь в 1С: Админ_1.
1С под этим пользователем должна быть постоянно запущена. Необходимо проверять запущен ли сеанс 1с под пользователем Админ_1, если не запущен, то необходимо запустить.
Т.к. на терминальнике могут быть запущены другие сеансы 1С под различными пользователями 1С, возникает вопрос, как определить что запущен или не запущен сеанс 1С именно под пользователем Админ_1. Каламбурно, но вроде бы понятно.
Просьба помочь дельным советом или кодом скрипта.
Заранее всем спасибо.
База SQL.
Терминальный доступ.
Есть следующая задача: необходимо с помощью скрипта определять запущен ли сеанс под определенным пользователем 1С, т.е. к примеру есть пользователь в 1С: Админ_1.
1С под этим пользователем должна быть постоянно запущена. Необходимо проверять запущен ли сеанс 1с под пользователем Админ_1, если не запущен, то необходимо запустить.
Т.к. на терминальнике могут быть запущены другие сеансы 1С под различными пользователями 1С, возникает вопрос, как определить что запущен или не запущен сеанс 1С именно под пользователем Админ_1. Каламбурно, но вроде бы понятно.
Просьба помочь дельным советом или кодом скрипта.
Заранее всем спасибо.
По теме из базы знаний
- Занимательный PowerShell
- Многопоточный CI-контур для 1С c Packer, Vagrant и Jenkins. Часть 1. Описание системы и обзор инструментария
- Вы запускаете приложения, но делаете это без уважения
- Опыт использования 1С: Исполнитель (версия 2.0)
- Взаимодействие с сотрудниками и клиентами из одного окна конфигурации 1С (Телеграм, ВКонтакте, Facebook, Discord). Преимущества, технические особенности, подводные камни
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Хотелось бы сделать все скриптом, т.к. все равно нужно держать один сеанс 1С, который будет контролировать и запускать остальные под нужными пользователями.
Тогда снова тот же вопрос, как проверить, что запущена 1С под пользователем, который контролирует и проверяет запуск других?
Тогда снова тот же вопрос, как проверить, что запущена 1С под пользователем, который контролирует и проверяет запуск других?
Есть вот такой вот вариант:
@echo off
set application=1cv8.exe
tasklist /FI "Пользователь eq zzz" | find /I "%application%" >nul
if errorlevel 1 (
echo %application% is not running
d:\automation\mobi-c.vbs
) else (
echo %application% is running
)
Но насколько я понял строчка: tasklist /FI "Пользователь eq ххх" | find /I "%application%" >nul, проверяет запущена ли 1С под терминальным пользователем zzz.
@echo off
set application=1cv8.exe
tasklist /FI "Пользователь eq zzz" | find /I "%application%" >nul
if errorlevel 1 (
echo %application% is not running
d:\automation\mobi-c.vbs
) else (
echo %application% is running
)
Но насколько я понял строчка: tasklist /FI "Пользователь eq ххх" | find /I "%application%" >nul, проверяет запущена ли 1С под терминальным пользователем zzz.
Решил задачку следующим образом, может будет полезно.
'На сервере подразумевается наличие только одного кластера и нескольких рабочих процессов
'имя пользователя 1С:Предприятия
UserName = "zzz"
URobot_Vipusk = "Robot_Vipusk"
URobot_GP = "Robot_GP"
URobot_Transp = "Robot_Transp"
'пароль пользователя 1С:Предприятия
UserPass = ""
UPRobot_Vipusk = "zzz1"
UPRobot_GP = "zzz1"
UPRobot_Transp = "zzz1"
'имя сервера 1С
ServerName = "SQLServer"
BaseName = "Base83"
'количество рабочих процессом минус 1
pn = 0
Dim Connector
Dim AgentConnection
Dim Cluster
Dim WorkingProcess
Dim WorkingProcessConnection
Dim ibDesc
Dim connections
Dim ConnectString
Dim StdOut
Set StdOut = WScript.StdOut
Dim bRobot_Vipusk
Dim bRobot_GP
Dim bRobot_Transp
Set Connector = CreateObject("V83.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Dim p
For p = 0 To pn
bRobot_Vipusk = False
bRobot_GP = False
bRobot_Transp = False
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(p)
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
For i = LBound(Connections) To UBound(Connections)
set Connection = connections(i)
If (Connection.AppID <> "COMConsole") Then
' Проверяем робота на выпуске
If Connection.userName = "Robot_Vipusk" Then
bRobot_Vipusk = True
End If
' Проверяем робота на ГП
If Connection.userName = "Robot_GP" Then
bRobot_GP = True
End If
' Проверяем робота на транспортной
If Connection.userName = "Robot_Transp" Then
bRobot_Transp = True
End If
End if
Next 'i
Next 'p
' Запуск робота на выпуске
If Not bRobot_Vipusk Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Vipusk & " /P " & UPRobot_Vipusk
WScript.Sleep (15000)
End If
' Запуск робота на ГП
If Not bRobot_GP Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_GP & " /P " & UPRobot_GP
WScript.Sleep (15000)
End If
' Запуск робота на транспортной
If Not bRobot_Transp Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Transp & " /P " & UPRobot_Transp
'WScript.Sleep (15000)
End If
WScript.quit 0
'На сервере подразумевается наличие только одного кластера и нескольких рабочих процессов
'имя пользователя 1С:Предприятия
UserName = "zzz"
URobot_Vipusk = "Robot_Vipusk"
URobot_GP = "Robot_GP"
URobot_Transp = "Robot_Transp"
'пароль пользователя 1С:Предприятия
UserPass = ""
UPRobot_Vipusk = "zzz1"
UPRobot_GP = "zzz1"
UPRobot_Transp = "zzz1"
'имя сервера 1С
ServerName = "SQLServer"
BaseName = "Base83"
'количество рабочих процессом минус 1
pn = 0
Dim Connector
Dim AgentConnection
Dim Cluster
Dim WorkingProcess
Dim WorkingProcessConnection
Dim ibDesc
Dim connections
Dim ConnectString
Dim StdOut
Set StdOut = WScript.StdOut
Dim bRobot_Vipusk
Dim bRobot_GP
Dim bRobot_Transp
Set Connector = CreateObject("V83.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Dim p
For p = 0 To pn
bRobot_Vipusk = False
bRobot_GP = False
bRobot_Transp = False
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(p)
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
For i = LBound(Connections) To UBound(Connections)
set Connection = connections(i)
If (Connection.AppID <> "COMConsole") Then
' Проверяем робота на выпуске
If Connection.userName = "Robot_Vipusk" Then
bRobot_Vipusk = True
End If
' Проверяем робота на ГП
If Connection.userName = "Robot_GP" Then
bRobot_GP = True
End If
' Проверяем робота на транспортной
If Connection.userName = "Robot_Transp" Then
bRobot_Transp = True
End If
End if
Next 'i
Next 'p
' Запуск робота на выпуске
If Not bRobot_Vipusk Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Vipusk & " /P " & UPRobot_Vipusk
WScript.Sleep (15000)
End If
' Запуск робота на ГП
If Not bRobot_GP Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_GP & " /P " & UPRobot_GP
WScript.Sleep (15000)
End If
' Запуск робота на транспортной
If Not bRobot_Transp Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Transp & " /P " & UPRobot_Transp
'WScript.Sleep (15000)
End If
WScript.quit 0
(10) сделал для файловой как-то так
МойОбщийМодуль.ИнтернетМагазинЗапущен - экспортная функция общего модуля МойОбщийМодуль(с галкой внешнее соединение), которая возвращает истину, если пользователь найден в соединениях. Добавлено через расширение.
проверка.vbs
Плюс данного метода в том, что для проверки не требуется клиентская лицензия.
МойОбщийМодуль.ИнтернетМагазинЗапущен - экспортная функция общего модуля МойОбщийМодуль(с галкой внешнее соединение), которая возвращает истину, если пользователь найден в соединениях. Добавлено через расширение.
проверка.vbs
Dim Connector
Dim Connection
Dim ConnectString
Dim IMStarted
Set Connector = CreateObject("V83.COMConnector")
ConnectString = "File=D:\ПутьКБазе;usr=""Администратор"";"
Set Connection = Connector.Connect(ConnectString)
IMStarted = Connection.[МойОбщийМодуль].[ИнтернетМагазинЗапущен]
If Not IMStarted Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files\1cv8\8.3.15.1656\bin\1cv8.exe"" ENTERPRISE /F ""D:\ПутьКБазе"" /N ""Интернет-магазин"" /P """""
End If
ПоказатьDim Connection
Dim ConnectString
Dim IMStarted
Set Connector = CreateObject("V83.COMConnector")
ConnectString = "File=D:\ПутьКБазе;usr=""Администратор"";"
Set Connection = Connector.Connect(ConnectString)
IMStarted = Connection.[МойОбщийМодуль].[ИнтернетМагазинЗапущен]
If Not IMStarted Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files\1cv8\8.3.15.1656\bin\1cv8.exe"" ENTERPRISE /F ""D:\ПутьКБазе"" /N ""Интернет-магазин"" /P """""
End If
Плюс данного метода в том, что для проверки не требуется клиентская лицензия.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот