Как в MS Windows server завершить сессии пользователей в терминале в определенное время

04.03.16

Разработка - Инструментарий разработчика

Нужно сделать backup базы, но пользователи не выходят нормально из 1С и висят терминальные сессии, что делать?
Просто поставь скрипт в задачи сервера, например, за час до бекапа, и вуаля - все пользователи вышли.
Скрипт ниже :)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Скрипты завершения сеансов (пароль: 1)
.rar 1,29Kb ver:1
22
22 Скачать (1 SM) Купить за 1 850 руб.

Преамбула:

Как то, в одной конторе нужно было бэкапить файловую базу а она в свою очередь хранилась на серваке, к серваку юзвери цеплялись терминальным клиентом и работали с 1С, понадобилось перед бекапом гасить юзеров, точнее выходить из их сеансов.

И вот был написан скриптик, который по времени перед бекапом выкидывает пользователей.

Скрипт, кстати, во вложении (точнее, 3 скрипта: выкинуть всех, выкинуть активных и выкинуть отключенных).

Как это работает на примере скрипта, который выкидывает всех пользователей:

  1. Формируем файл со списком созданных сессий;

query user >user_temp_all.txt

      2. Убираем из файла строку со словом “console”, так как консольного юзера не нужно выкидывать;

find "console" user_temp_all.txt > user_temp.txt /V

    3. Находим строки и со словом «Активно» (это чтобы в первый этап собрались сессии активные, почему сделано в два этапа, объясню дальше) и эти строки сохраняем в файл user.txt (кстати, это для руского сервака, если сервак другой, эту строку надо поправить, проверялось на 2008);

find "Активно" user_temp.txt > user.txt

    4. Убиваем файл start.bat;

del start.bat

    5. Вдруг никто не подключен, соответственно файл user.txt будет пустой, а файл скрипта нам нужен в любом случае, надо создать и написать что-то в файл, чтобы он смог запуститься;

@echo rem begin files start.bat>start.bat

    6. Обработаем файл user.txt. Синтаксис команды for можно посмотреть  по команде for /?, но расскажу по-быстрому: команда фор перебирает файл и разлаживает содержимое строки по переменным, ну и запускает для каждой строки команду,  разберем начало for /f "skip=2 tokens=3," %%i

 for в принципе сама команда, ключ /F означает перебрать и выполнить команду для каждой строки

параметр skip=2 означает, что пропустим 2-е первые строчки

параметр tokens=3 означает, что берем в строке 3-е значение, разделенное пробелами или «,» или «таб.»  и помещаем его в переменную %%i

Разберем следующий кусок in (user.txt) DO echo logoff  %%i >>start.bat

In (user.txt) означает, что перебираем файл user.txt

DO echo logoff %%i>>start.bat выполнить команду echo logoff %%i (сюда подставляется ид сеанса или значение переменной %%i)  и результат добавить к файлу start.bat, команда эхо просто выводит в поток то, что написано после этого слова

     7. Первый этап закончили, теперь нужно обработать неактивные сессии, допишем в файл start.bat  строчку «echo rem NoAction session» просто чтобы видеть где закончился 1-й этап скрипта, так как файл start.bat не удаляется, то можно посмотреть что в нем было после запуска;

@echo rem NoAction session >>start.bat

     8. Принцип второго этапа аналогичный первому, теперь в файле с сессиями ищем строки со словом «Диск», это те сеансы, которые отключены;

find "Диск" user_temp.txt>user.txt

  1. А вот теперь почему делали в два этапа. Просто файл сессий имеет следующий вид

 Файл сессий

 

И, как видно, из файла строка со статусом «Диск» не имеет Имя сеанса и соответственно в отключенном сеансе ID сеанса является 2-й переменной, если пробел считать разделителем, а при активном сеансе она является 3-й переменной, поэтому в первом этапе параметр tokens=3, а во втором этапе tokens=2, вот поэтому скрипт разбил на 2 части

for /f "skip=2 tokens=2," %%i in (user.txt) DO echo logoff ID %%i >>start.bat

     9. Теперь убиваем лишние файлы

del user_temp.txt

del user.txt

     10. Запускаем наш батник, который у нас получился, и результат работы выводим в файл log_logoff.txt

start.bat > log_logoff.txt

 

ВСЕ

З.Ы.: почему не убили все файлы? чтобы видеть, какие вообще были сеансы после запуска скрипта.

терминал сессии пользователи выбросить выгнать закрыть завершить сеанс

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171901    962    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14411    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17315    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27309    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11918    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191285    1152    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18101    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1136    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. insurgut 208 04.03.16 21:30 Сейчас в теме
Есть вариант гораздо проще. Например WinRAR может архивировать совместно открытые файлы. Получается что-то вроде бэкапа "налету" как в MSSQL, только для файловой базы.
2. Pasha1st 850 04.03.16 23:22 Сейчас в теме
Расскажу одну страшную вещь. Выкидывать пользователей - грубо но надежно если все пользователи терминальные. Если есть клиенты по сети/web - не поможет.
(1) insurgut, Архивирование базы в процессе изменения - оригинальный способ выстрелить себе в ногу.
Но есть решение лучше - теневые копии томов. Советую поискать утилиту vshadow.exe (раздельно для 32 и 64-разрядных систем) и рецепты использования. Позволяет получить моментальную консистентную (физически) копию данных. В т.ч. и для 7.7 с кучей файлов. На случай если база файловая а пользователи непредсказуемые.
5. insurgut 208 09.03.16 12:33 Сейчас в теме
(2) Pasha1st, в каком процессе изменения? Если я правильно понял - постановка задачи "Бэкап файловой базы в нерабочее время", поэтому терминальные сессии и завершают. Если пользователь забыл закрыть программу, то с базой ничего не происходит, копию налету можно спокойно делать.
sassashok; +1 Ответить
7. Pasha1st 850 10.03.16 00:39 Сейчас в теме
(5) insurgut, если что-то может пойти не так - рано или поздно оно пойдет не так. Если мы допускаем что файл базы может быть открыт во время снятия бекапа, то и изменения в него могут вноситься именно в этот момент. Если нет желания зависеть от всех "если" для важных данных - не стоит доверять архиватору получение данных с ключом "открывать совместно используемые файлы". Относительно надежным тут будет рецепт с теневыми копиями - создать временную теневую копию тома, сделать копию файлов 1CD, [освободить теневую копию], поместить скопированное в архив, архив в облако, облако в ... А лучше использовать SQL-базы ;)
8. RomanBor 119 10.03.16 07:45 Сейчас в теме
Лучше / хуже / Бекап какая разница есть скрипт закрытия терминальных сессий, как его использовать марока каждого либо для выброса всех пользователей перед обновлением либо еще для чего дело каждого в отдельности.

ЗЫ: Про теневые копии есть у нас один сервачек (ms windows server 2012) там если пользователи остаются в системе и происходит бекап посредством
VSS(Volume Shadow Copy Service) то после бекапа с утра пользователи спокойно приходят поднимают сеанс и начинают работать и база через время падает в основном таблицы с остатками, причем падает оригинальная база бекап нормальный, толи сервак отключает дескрипторы открытых файлов, вообщем разбираемся.
(7) Pasha1st, не увсех есть денежки на сервак 1С
sassashok; +1 Ответить
3. foxey 4 09.03.16 09:10 Сейчас в теме
Скажите, а почему все пункты в последовательности действий пронумерованы исключительно номером "1"?
Этим подчеркнута важность каждого действия или, наоборот, говорит, что последовательность действий не важна и любой пункт может выполняться первым?
4. RomanBor 119 09.03.16 09:11 Сейчас в теме
(3) foxey, а это банально ошибка
6. svk 09.03.16 18:57 Сейчас в теме
Всё проще. Я в глобальном модуле написал процедуру, которая сама начинает закрывать приложение после 21 часа (например). Пользователю выходит сообщение "В базе проводятся регламентные работы, Закрыть??" с таймаутом.Если никто не нажал "нет", то база закрывается. Если человеку что-то нужно быстро доделать, он нажимает на сообщении нет и доделывает свои дела. Сообщение выходит через каждые 5 минут.
9. insurgut 208 10.03.16 10:38 Сейчас в теме
А есть варианты, как выгнать всех сидящих по локальной сети в расшаренной базе?
10. RomanBor 119 10.03.16 12:03 Сейчас в теме
(9) insurgut,
встроить в конфу механизм выкидывания
11. Robotron_2007 13.05.19 17:14 Сейчас в теме
Благодарю за Вашу работу!
12. kotovsky 05.01.23 10:27 Сейчас в теме
Можно укоротить:

query user > user_all.txt
find "Disc" user_all.txt > userDisc.txt
for /f "skip=2 tokens=2," %%i in (userDisc.txt) DO logoff %%i
find "Active" user_all.txt > userActive.txt
for /f "skip=2 tokens=3," %%i in (userActive.txt) DO logoff %%i
del userDisc.txt
del userActive.txt
Оставьте свое сообщение