Помощь - Поиск - Пользователи - Календарь
Полная версия: Автоматический выход пользователей из 1с 7.7
1C-PRO - Форум по 1С > Общие форумы > Полезные ссылки
Lexboi
Здравствуйте уважаемые 1с-ники! Передомной встал такой вопрос: имеется терминал-сервер+мускул,через него работают пользователи 1с, ежесуточно происходит архивирование баз, но она завершится успешно только при условии что в базе не осталось ниодного пользователя, но пользователи частенько забывают выходить из базы, либо выходят неправильно, собственно что меня интересует: возможно ли автоматизировать выход пользователей из базы по расписанию? Заранее благодарен за ваши ответы, буду рад любым предложениям!
BabySG
Посмотри тут
Lexboi
Цитата(BabySG @ 11.2.2008, 18:16) *

Посмотри тут

Спасибо большое, но не то, хотелось бы корректного выхода пользователей из базы, есть еще предложения?
HDD
Пиши мне на мыло, если еще интересно, вышлю.
Stado_adama
а как насчет сюда положить? ну или на видное место в инетке, а сюда ссылочку?
BuHunyx
Да кст. актуальная тема , правда меня интересуют не столько бэкапы как первый запуск программы который должен проходить в монопольном режиме , так что up!
Maikll
взято с "серого форума"
Цитата
'Скрипт демонстрирует возможность принудительного завершения процессов MS SQL Server, работающих
'с указанными базами данных. Если у вас SQL-версия 1С:Предприятия, данный код можно применять
'непосредственно перед пакетным запуском 1С:Предприятия, требующим монопольного входа в базу данных
'(например, при резервном копировании).

'ВНИМАНИЕ! Отредактируйте раздел "НАСТРОЙКИ СКРИПТА"!

'ВНИМАНИЕ! Чтобы опробовать скрипт, не производя деструктивных действий, достаточно закомментировать
'оператор "sql_SQL_DMO.KillProcess sql_ProcessID".

Option Explicit

Dim sql_ServerName 'Имя SQL-сервера
Dim sql_UserName 'Имя пользователя SQL-сервера
Dim sql_UserPassword 'Пароль пользователя SQL-сервера
Dim sql_SQL_DMO 'Объект "SQLDMO.SQLServer"
Dim sql_Processes 'Массив процессов SQL-сервера
Dim sql_Num 'Счётчик для перебора процессов SQL-сервера
Dim sql_LogPath 'Путь к файлу лога этого скрипта.
Dim sql_LogFile 'Поток текстового файла лога этого скрипта
Dim sql_FSO 'Объект "Scripting.FileSystemObject"
Dim sql_Bases 'Коллекция имён баз данных для проверки
Dim sql_Base 'Элемент коллекции имён баз данных для проверки

Set sql_Bases = CreateObject("Scripting.Dictionary")
'**************************************************************************************************
'->> НАСТРОЙКИ СКРИПТА
'**************************************************************************************************
'Имя SQL-сервера
sql_ServerName = "MyServer"
'Имя пользователя SQL-сервера
sql_UserName = "sa"
'Пароль пользователя SQL-сервера
sql_UserPassword = "Hjkds8udUy8"
'Путь к файлу лога этого скрипта.
sql_LogPath = "X:\BackUp1C\Kill_SQL_Processes.log"
'Перечень SQL-баз данных 1С для проверки
sql_Bases.Add 1, UCase("My_1C_Base1")
sql_Bases.Add 2, UCase("My_1C_Base2")
sql_Bases.Add 3, UCase("My_1C_Base3")
'**************************************************************************************************
'<<- НАСТРОЙКИ СКРИПТА
'**************************************************************************************************
Set sql_FSO = CreateObject("Scripting.FileSystemObject")
Set sql_LogFile = sql_FSO.CreateTextFile(sql_LogPath)

Set sql_SQL_DMO = CreateObject("SQLDMO.SQLServer")
sql_SQL_DMO.Connect sql_ServerName, sql_UserName, sql_UserPassword
Set sql_Processes = sql_SQL_DMO.EnumProcesses()
For sql_Num=1 To sql_Processes.Rows
Dim sql_DataBaseName
Dim sql_ComputerName
Dim sql_ProcessID
sql_ComputerName = UCase(Trim(sql_Processes.GetColumnString(sql_Num, 4)))
sql_DataBaseName = UCase(Trim(sql_Processes.GetColumnString(sql_Num, 7)))
sql_ProcessID = Trim(sql_Processes.GetColumnLong(sql_Num, 1))

For Each sql_Base In sql_Bases
If sql_Bases.Item(sql_Base) = sql_DataBaseName Then
sql_SQL_DMO.KillProcess sql_ProcessID
sql_LogFile.WriteLine CStr(Now) & " SQL-SERVER PROCESS WAS KILLED: ComputerName=" & sql_ComputerName & "; DataBaseName=" & sql_DataBaseName & ";"
Exit For
End If
Next
Next

sql_SQL_DMO.Close
sql_LogFile.Close


второй вариант - этим пользуюсь сам
Цитата
'Скрипт демонстрирует возможность принудительного завершения процессов "1cv7s.exe" на всех компьютерах
'указанного домена. Данный код можно применять непосредственно перед пакетным запуском 1С:Предприятия,
'требующим монопольного входа в базу данных (например, при резервном копировании).

'ВНИМАНИЕ! Задайте нужное значение переменной "DomainName"!

'ВНИМАНИЕ! Для успешной работы скрипта его желательно запускать с правами администратора домена.

'ВНИМАНИЕ! Чтобы опробовать скрипт, не производя деструктивных действий, достаточно закомментировать
'оператор "Proc.Terminate".

Option Explicit
On Error Resume Next

Dim DomainName 'Имя домена
DomainName = "MYDOMAIN"

Dim StrResult 'строка результата работы всей программы
StrResult = StrResult & CStr(Now) & " начало работы скрипта" & VbCrLf

Dim ADSI
Set ADSI = GetObject("WinNT://" & DomainName)
ADSI.Filter = Array("computer")

Dim Comp 'компьютер
Dim WMI 'объект WMI
Dim Proc 'процесс

Dim CurrName 'имя текущего компьютера
CurrName = GetNameComp()

'Цикл по компьютерам домена
For Each Comp In ADSI
If Comp.Name <> CurrName Then
Set WMI = GetObject("winmgmts:{ImpersonationLevel=Impersonate}!\\" & Trim(Comp.Name) & "\Root\CIMV2")
If Err.Number=0 Then
'Цикл по процессам компьютера
For Each Proc In WMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv7s.exe'")
StrResult = StrResult & _
CStr(Now) & " Computer=" & Comp.Name & " PID=" & Proc.ProcessId & _
VbCrLf
'Завершение процесса
Proc.Terminate
Next 'Цикл по процессам компьютера
Else 'Не удалось соединиться с компьютером
If Err.Number <> 462 Then 'The remote server machine does not exist or is unavailable
StrResult = StrResult & _
" " & CStr(Now) & " Computer=" & Comp.Name & " ERROR " & Err.Number & _
VbCrLf
End If
End If
Err.Clear
End If
Next 'Цикл по компьютерам домена

StrResult = StrResult & CStr(Now) & " конец работы скрипта" & VbCrLf

'Отображение результата
ShowInNotepad("Процессы 1cv7s.exe:" & VbCrLf & VbCrLf & StrResult)
'==========================================================================
'Процедура отображает переданную строку в блокноте
Sub ShowInNotepad(StrToFile)
Dim FSO 'Объект файловой системы Scripting.FileSystemObject
Dim TempPath 'Путь к временному файлу
Dim TxtFile 'Поток текстового файла

Set FSO = CreateObject("Scripting.FileSystemObject")
TempPath = GetTempPath() & "\" & FSO.GetTempName
Set TxtFile = FSO.CreateTextFile(TempPath)
TxtFile.WriteLine(StrToFile)
TxtFile.Close
CreateObject("WScript.Shell").Run "notepad.exe " & TempPath
WScript.Sleep 1000
FSO.DeleteFile TempPath
End Sub 'ShowInNotepad
'==========================================================================
'Функция возвращает путь к каталогу временных файлов текущего пользователя
Function GetTempPath()
GetTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
End Function 'GetTempPath
'==========================================================================
'Функция возвращает имя текущего компьютера
Function GetNameComp()
GetNameComp = CreateObject("WScript.Network").ComputerName
End Function 'GetNameComp

все скрипты на vbs
Snickbw
Цитата(Maikll @ 6.8.2008, 0:19) *
второй вариант - этим пользуюсь сам


А если нет домена?
Maikll
ну чисто теоретически может помочь pskill от Русиновича. Пишешь батник в качестве аргумента подставляешь имена компов из скажем текстового файла. Но нужно иметь доступ ко всем компам по сети с правами адмнистратора

вот здесь об утилите подробно- http://technet.microsoft.com/ru-ru/sysinte...s/bb896683.aspx
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.