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

04.03.16

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

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

Скачать файлы

Наименование Файл Версия Размер
Скрипты завершения сеансов (пароль: 1)
.rar 1,29Kb
22
.rar 1 1,29Kb 22 Скачать

Преамбула:

Как то, в одной конторе нужно было бэкапить файловую базу а она в свою очередь хранилась на серваке, к серваку юзвери цеплялись терминальным клиентом и работали с 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

 

ВСЕ

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

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

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121534    670    389    

709

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7247    21    6    

38

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3488    11    1    

33

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177710    1073    0    

848

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99328    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18092    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28078    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23589    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. insurgut 207 04.03.16 21:30 Сейчас в теме
Есть вариант гораздо проще. Например WinRAR может архивировать совместно открытые файлы. Получается что-то вроде бэкапа "налету" как в MSSQL, только для файловой базы.
2. Pasha1st 837 04.03.16 23:22 Сейчас в теме
Расскажу одну страшную вещь. Выкидывать пользователей - грубо но надежно если все пользователи терминальные. Если есть клиенты по сети/web - не поможет.
(1) insurgut, Архивирование базы в процессе изменения - оригинальный способ выстрелить себе в ногу.
Но есть решение лучше - теневые копии томов. Советую поискать утилиту vshadow.exe (раздельно для 32 и 64-разрядных систем) и рецепты использования. Позволяет получить моментальную консистентную (физически) копию данных. В т.ч. и для 7.7 с кучей файлов. На случай если база файловая а пользователи непредсказуемые.
5. insurgut 207 09.03.16 12:33 Сейчас в теме
(2) Pasha1st, в каком процессе изменения? Если я правильно понял - постановка задачи "Бэкап файловой базы в нерабочее время", поэтому терминальные сессии и завершают. Если пользователь забыл закрыть программу, то с базой ничего не происходит, копию налету можно спокойно делать.
sassashok; +1 Ответить
7. Pasha1st 837 10.03.16 00:39 Сейчас в теме
(5) insurgut, если что-то может пойти не так - рано или поздно оно пойдет не так. Если мы допускаем что файл базы может быть открыт во время снятия бекапа, то и изменения в него могут вноситься именно в этот момент. Если нет желания зависеть от всех "если" для важных данных - не стоит доверять архиватору получение данных с ключом "открывать совместно используемые файлы". Относительно надежным тут будет рецепт с теневыми копиями - создать временную теневую копию тома, сделать копию файлов 1CD, [освободить теневую копию], поместить скопированное в архив, архив в облако, облако в ... А лучше использовать SQL-базы ;)
8. RomanBor 116 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 116 09.03.16 09:11 Сейчас в теме
(3) foxey, а это банально ошибка
6. svk 09.03.16 18:57 Сейчас в теме
Всё проще. Я в глобальном модуле написал процедуру, которая сама начинает закрывать приложение после 21 часа (например). Пользователю выходит сообщение "В базе проводятся регламентные работы, Закрыть??" с таймаутом.Если никто не нажал "нет", то база закрывается. Если человеку что-то нужно быстро доделать, он нажимает на сообщении нет и доделывает свои дела. Сообщение выходит через каждые 5 минут.
9. insurgut 207 10.03.16 10:38 Сейчас в теме
А есть варианты, как выгнать всех сидящих по локальной сети в расшаренной базе?
10. RomanBor 116 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
Оставьте свое сообщение