gifts2017

Скрипт для отключения пользователей из файловых баз 1с-Предприятия

Опубликовал bulpi bulpi (bulpi) в раздел Администрирование - Системное

Скрипт для отключения пользователей из файловых баз 1с-Предприятия. Убивает процессы на локальной машине и сетевые подключения к заданному каталогу. Неважно, какая платформа, 77 или 8Х, да и для других программ тоже можно применять.

Для чего нужно? Если вы на ночь запланировали кучу обработок, а какая-то с$#а периодически оставляет базу открытой, можно, конечно, понадеяться на ОбработкаОжидания() и ЗавершитьРаботуСистемы().

Вот только если в нужный момент 1с-Предприятие будет обрабатывать длинный отчет, или просто зависнет, или приложение закроется, а процесс останется, то будет облом. Тут нужно рубить шашкой! А шашка - вот она.

Разработка не моя, вот ссылка на первоисточник (c)Александр Кочуров http://v7backup.narod.ru/

Я только выцарапал нужные скрипты из большого и в остальном не нужного мне проекта.

Автор разрешил мне публиковать этот кусок со ссылкой на первоисточник.

Работает с версиями системы  Win2000 prof и старше.

Здесь искал, не нашел разработок для файлового варианта, только для sql. Может, плохо искал? :)

 

Замеченные мною (bulpi) баги:

Процессы, запущенные в терминальном режиме, закрываются, если только

1)пользователь, запускающий скрипт - Администратор

или

2)пользователь, запускающий скрипт, и пользователи терминалов входили под одним логином

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

Наименование Файл Версия Размер Кол. Скачив.
Zakryt1c.zip
.zip 3,09Kb
22.04.10
677
.zip 3,09Kb 677 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Аркадий Кучер (Abadonna) 23.04.10 06:58
(0)
Здесь искал, не нашел разработок для файлового варианта, только для sql.

Это что за шутки? Убивается процесс , при чем тут какой вариант базы?
Может, плохо искал?

Именно, вот только моих (а и другие наверняка есть)
http://infostart.ru/public/66153/
http://infostart.ru/public/16662/
http://infostart.ru/public/14758/
http://infostart.ru/public/14569/
http://infostart.ru/public/59436/
да и вообще есть taskkill родной виндососовский
2. bulpi bulpi (bulpi) 23.04.10 08:12
(1)
Спасибо. А все эти замечательные разработки отключают подключение к каталогу базы ПО СЕТИ (что абсолютно необходимо при использовании файл-сервера) ?
3. bulpi bulpi (bulpi) 23.04.10 13:35
(1)
Ну так как? Или дальше - тишина (с) Шекспир ? :)
Оно конечно, можно поплеваться ссылками и забыть. Добрее надо быть к людям. Не все ж такие умные, как Вы. :D
4. Jurii (jmw) 24.04.10 07:55
У меня почему-то на 147 строчку ругается:
Const ForReading = 1, ForWriting = 2, ForAppending = 8 ' константа для объекта Scripting.FileSystemObject

Да и зачем изобретать такой сложный велосипед, если достаточно одной команды:
TASKKILL /F /IM 1c* /T
5. bulpi bulpi (bulpi) 24.04.10 16:23
(4)
Насчет taskkill , пожалуй, согласен. Но та часть, которая реализует отключение по сети , с помощью taskkill никак не сделается. А насчет ошибки - ???? без комментариев. Никогда не было. Какая система?
6. Аркадий Кучер (Abadonna) 24.04.10 16:37
(4)
Ну так как? Или дальше - тишина (с) Шекспир ?

Если ты считаешь, что мое драгоценной внимание, будет целиком посвящено данной разработке, то ты сильно ошибаешься ;) :D
7. bulpi bulpi (bulpi) 24.04.10 17:49
(6) Кто сказал "А", должен говорить и "Б". Так как насчет отключения процессов по сети? Времени много не надо, просто ДА или НЕТ.
8. Аркадий Кучер (Abadonna) 24.04.10 20:03
Кто сказал "А", должен говорить и "Б"

Для начала: Б. Доволен?

taskkill [/s компьютер] [/u домен\пользователь [/p пароль]]] [/fi имя_фильтра] [/pid код_процесса]|[/im имя_образа] [/f][/t]

Параметры
/s компьютер
Указывает имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). По умолчанию используется локальный компьютер.
/u домен\
пользователь
Выполнение команды с разрешениями учетной записи пользователя, который указан как пользователь или домен\пользователь. По умолчанию используются разрешения текущего вошедшего пользователя компьютера, с которого поступила эта команда.
/p пароль
Определяет пароль учетной записи пользователя, заданной параметром /u.
/fi имя_фильтра

Обычно [/s компьютер] даже очень достаточно, чтобы отрубить процесс по сети
9. Аркадий Кучер (Abadonna) 24.04.10 20:11
А теперь могу и разжевать:
http://infostart.ru/public/14758/ и
http://infostart.ru/public/16662/
- отрубят всех при работе в терминальном режиме
http://infostart.ru/public/19242/ - закроет все сетевые файлы, когда движок у каждого юзверя, а база - на файловом сервере (т.е как раз и отрубит их по сети)
А, кроме того, в (1) я писал про taskkill, так что смотри и (8)
P.S. И не раздражай модератора :D Шучу
10. bulpi bulpi (bulpi) 24.04.10 23:21
(8),(9)
Спасибо.
Но я буду нудным. taskkill - замечательная вещь для закрытия процессов на самой машине. Но для закрытия процессов, обращающихся к сетевой папке, он не годится. Ключ /S не поможет, т.к. заранее неизвестно имя или адрес компа, где зарывать. Вот разработка из п.9 (http://infostart.ru/public/19242/)
это вроде бы то, что надо. Но и тут засада! Где режим командной строки ? Задача состоит в том, чтобы ночью, когда нет никого, запустить программку, а потом уже что кому надо, кому бэкап, кому переиндексацию и др. Если нет режима командной строки в замечательной Вашей программке CloseNetFiles, то где возьмется НОЧЬЮ оператор, который нажмет нужные кнопки?
11. bulpi bulpi (bulpi) 26.04.10 21:44
Мне кажется, пора подвести итоги и закрыть дискуссию :) На сайте много подобных разработок, я действительно плохо искал. Однако разработки, полностью перекрывающей возможности обсуждаемой, пока не нашлось (может , она и есть, сайт большой). Таким образом, имеем слабые элементы новизны :) и позволяем публикации жить. Кому-нибудь, может быть, пригодится.
12. Евгения (Enya) Воробьёва (Enya_06) 28.04.10 09:05
Разработочка вполне не плохая...очень часто нужна бывает))) вот только когда будет универсальная... :(
13. bulpi bulpi (bulpi) 28.04.10 12:24
(12)Универсальная в каком смысле?
14. Евгения (Enya) Воробьёва (Enya_06) 28.04.10 20:08
(13)Да у каждой обработки свои баги...но видимо пока идеала никто еще не накодил! Да просто очень полезная вещь, от юзеров которые по каким то либо причинам 1с ку не вырубают в офисах)) Экономит время и нервы)
15. Serg (Sykoku) 29.04.10 11:57
Судя по коду, вся "сложность" данной обработки на Басике - получение списка пользователей и скармливание оного все тому же горячо нелюбимому TaskKill'у.
Это делается проще и быстрее. да еще и штатными средствами.

query session > c:\term.txt
for /F "eol=; tokens=3 skip=3" %i in (c:\term.txt) do tsdiscon %i

При этом хотелось бы напомнить, что оное действие аналогично нажатию кнопки "Reset".

Нормальные люди используют
echo y | logoff rdp-tcp // (или указывают свой протокол.)

Это штатная команда для logoff'а всех сеансов на некотором протоколе, т.е. на TCP/IP (имена соединений перечисляются в Terminal Server Configuration; если есть еще Citrix, то могут быть еще ica-tcp, ica-ipx)

При запуске "logoff rdp-tcp" эта прога спрашивает "If you reset this session, all users using this protocol will be logged off. Continue (y/n)?". "echo y" заставляет ответить этой команде "y"

Для удаления всех соединений, кроме себя (текущего):
код
FOR /F "eol=> skip=1 tokens=1,2,3" %%i IN ('quser') DO RESET SESSION %%k

(можно просто tokens=3 и использовать reset session %%i; в моем варианте с tokens=1,2,3 в %%i будет имя пользователя, которое можно передавать в скрипт, выполняющийся в DO, а в %%k - session id). Символом ">" помечается текущее соединение (%%i включает в себя этот символ), поэтому eol=> эту строку "комментируем" и не учитываем при убивании сеансов.

А вот если задача стоит завершить сеанс корректно, то тогда придется в глобальном модуле вставить

ОбработкаОжидания("ЗавершениеРаботы1С",300);

И вставить процедуру

Процедура ЗавершениеРаботы1С()
ТекВр=ТекущееВремя();
Если (ТекВр>"23:00:00") Тогда
ЗавершитьРаботуСистемы(0);
КонецЕсли;
КонецПроцедуры
16. Serg (Sykoku) 29.04.10 12:07
Здесь искал, не нашел разработок для файлового варианта, только для sql. Может, плохо искал? :)


Плохо читал свой-же код.
cscript Kill1c.vbs //x //Nologo //t:60 "C:\Program Files\1Cv77sql\BIN\1cv7s.exe" "C:\1C\temp" "C:\temp\log.log"

1Cv77sql - это типа файл-серверный вариант?
17. Serg (Sykoku) 29.04.10 12:08
Можно еще правами на сервере поиграться. Например.

Закладка Sessions позволяет установить ограничения сеанса.

Вы можете установить период неактивности, по истечении которого производится автоматическая разрегистрация. Это особенно полезно в модемных соединениях; освободившееся соединение может использовать другой пользователь. Особо умные пользователи могут "обманывать" неактивность, просто периодически перемещая мышь. Вот почему вы можете еще установить максимальное время активности сеанса. Это предотвращает "монополизирование" пользователем соединения. На закладке Sessions также можно указать, что делать при отключении пользователя - принудительно завершить сеанс или оставить его работать. Закрытие сеансов предотвращает сервер от "забивания" работающими приложениями. С другой стороны, если оставить сеанс работающим, то пользователь может позднее снова подключиться к нему и продолжить работу. Я рекомендую завершать сеансы при отключении, но оставлять работать сеансы администраторов и отдельных важных пользователей. Администраторы часто запускают процессы, требующих много времени для свой работы. Если разрешить пользователю отключаться без закрытия саенсов, то пользователь может подключиться, запустить приложение, отключиться, пойти пообедать, потом снова вернуться, подключиться и закончить работу.
:D
18. bulpi bulpi (bulpi) 29.04.10 17:13
(16)
Нет, sql здесь ни при чем. Просто файл 1cv7s открывает и sql базы, и файловые. У меня были файловые базы, а sql-версию использовал просто для удобства - патч Саурона только для sql.
19. bulpi bulpi (bulpi) 29.04.10 17:16
(15)
Хм.. сколько оказывается всего умного придумали разные умные люди! :D Но все таки по сети так не отключиться, ИМХО, только на этом копьютере. Вариант с ОбработкойОжидания() в 1с точно не годится, даже не надо его вспоминать по вышеизложенным причинам.
20. Serg (Sykoku) 29.04.10 19:18
(19)
А кто сначала мешает попытаться сначала "по хорошему" выгнать, а затем - по плохому?
Сложность в проверке условий? - Разнести в Scheduled с интервалом в 5-10 минут. И выполнять от имени Админа.
21. bulpi bulpi (bulpi) 30.04.10 11:29
(20)
Согласен. Но меня и со скриптом заклевали по поводу отсутствия новизны. А если бы я еще написАл про тривиальную ОбработкаОжидания... Вобще бы линчевали морально ;)
22. Erudite (erudite) 22.02.11 12:13
Автору - зачет (в т.ч. за грамотные ответы). Поставил +
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа