Имя: Пароль:
IT
Админ
Создать событие Windows из 1С возможно?
0 Mikhail Volkov
 
24.03.21
08:58
Надо создать некое событие Windows из 1С под пользователем ОС без админских прав, чтобы планировщик заданий по нему выполнил некое задание под системной учетной записью ОС. 1С создает события Windows в случае ошибок (других не нашел). Запуск команд SchTasks и EventCreate без административных прав бесполезно. А насчет команды MSG ничего не сказано про админские права. Запускаю ее при завершении работы последнего пользователя 1С. В журнале регистрации 1С вижу ее запуск, а в Просмотре событий Windows ее нет!?
Подскажите, как создать некое событие Windows? В 1С это предусмотрено? Или безвредную команду, которую можно запустить без админских прав?
1 Beduin
 
24.03.21
09:00
файлик создавай текстовый
2 mistеr
 
24.03.21
09:01
>Запуск команд SchTasks и EventCreate без административных прав бесполезно.

Насчет SchTasks ошибаешься. Нужно привильно настроить права на задание.
3 mistеr
 
24.03.21
09:01
(1) +1
4 Mikhail Volkov
 
24.03.21
09:08
(1) Какой, подробнее?
(2) Как, ключами в 1С, или планировщике заданий?
5 mistеr
 
24.03.21
09:17
(4) В планировщике
6 mistеr
 
24.03.21
09:18
(4) С файликом все просто. В задании проверяешь, если файлик есть, делаешь свое дело и файлик удаляешь.
Можно еще содержимое проверять, для надежности.
7 Kassern
 
24.03.21
09:28
(6) Ему об этом топик назад советовали, но все равно он хочет через "гланды" вопрос решать. Завтра уже события винды не так интересны будут, захочет к внешнему сервису через планировщик цепляться, если возвращает "just do it", то делает бекап)
8 Mikhail Volkov
 
24.03.21
09:34
(5) На какой вкладке планировщика: Триггеры, Действия, Условия, Параметры... Что именно?
9 Mikhail Volkov
 
24.03.21
09:51
(6) 1С только файлик создает, когда задание надо выполнить? А проверять его наличие планировщиком по расписанию?
10 Mikhail Volkov
 
24.03.21
10:06
(6) Или создание файла создает событие Windows? В каком журнале? Желательно Источник, Код события?
11 VladZ
 
24.03.21
10:08
Таки не понял, зачем это.
12 arsik
 
гуру
24.03.21
10:19
(0) Можно включить аудит объектов и добавить аудит конкретного файла. Тогда в событиях появится запись например события запись конкретного файла. И уже к нему можно планировщик прикрутить.
https://oblako.kz/help/windows/audit-dostpa-k-failam-windows-server
13 Mikhail Volkov
 
24.03.21
10:37
(12) Т.е. чтобы создание файла создавало событие Windows (10), надо включить аудит объектов и добавить аудит конкретного файла. 1С лишь будет создавать/удалять этот файл.
14 arsik
 
гуру
24.03.21
10:43
(13) Есть еще решение попроще.
1) Создаешь задачу в планировщике, которую может выполнить нужный тебе пользователь с ограниченными правами.
2) Основную задачу, с привилегированными правами,  привязываешь к событию выполнения задачи из 1)
15 arsik
 
гуру
24.03.21
10:44
+ (14) Из под пользователя выполняешь задачу 1) (например PS: "Start-ScheduledTask -TaskName 'qwer'"), выполняется задача 2)
16 Mikhail Volkov
 
24.03.21
10:54
(15) Не понял, как из 1С под пользователем с ограниченными правами запустить задачу 1) (например PS: "Start-ScheduledTask -TaskName 'qwer'")?
17 mistеr
 
24.03.21
11:15
(9) Да
18 arsik
 
гуру
24.03.21
11:43
(16) Ты где событие вызвать собрался? В контексте сервера 1с или на клиенте?
19 arsik
 
гуру
24.03.21
11:57
20 arsik
 
гуру
24.03.21
12:09
(16) Это вариант schtasks из повершела.
21 Mikhail Volkov
 
24.03.21
12:59
(17) По расписанию делается, как контрольное, если сразу не выполнилось. А вот сразу как - вопрос...
(18) При завершении работы последнего пользователя 1С, и закрытия его сеанса RDP. Пробовал запускать bat-файл из 1С, запускается под его учетной записью, но прерывается при завершении сеанса RDP. А в планировщике запускаю тот же bat-файл, но под СИСТЕМА.
(19) Это пример "Запуск задания планировщика после завершения другого задания" - другого задания планировщика или 1С? Если 1С, то почему сразу не запустить основное задание (16)? В чем смысл его двух этапного выполнения?
22 arsik
 
гуру
24.03.21
13:34
(21) Нафига такой огород городить. Ну привяжись в планировщике к тригеру при отключении от пользовательского сеанса. Проверяй в скрипте, все ли пользователи вышли.
23 Turku
 
24.03.21
13:50
(0) КомандаСистемы("schtasks /run /tn task_name");

Предварительно задание должно быть создано в системе. Потом найти это задание в папке "C:\Windows\System32\Tasks" и предоставить нужному пользователю (от которого 1С работает) права на чтение и чтение,выполнение.

У меня таким образом все работает.

Если хотите на сервере пускать, то тогда "ЗапуститьПриложение" используйте.
24 Mikhail Volkov
 
24.03.21
14:12
(22) Не все пользователи дисциплинированны, завершают свой сеанс. Есть вообще не выходят из терминала.
Прямого способа проверки не нашел.
(23) На всю папку "C:\Windows\System32\Tasks" предоставить пользователям 1С права на чтение и чтение, выполнение, или только на файл с имеем нужного задания?
25 Turku
 
24.03.21
14:33
(24) только на файл.
26 Mikhail Volkov
 
24.03.21
16:09
(25) Сделал, о проверить под обычным пользователем пока нет возможности...
(12) Умея 1С перед заданием очищает лог-файл текстовый. Добавил аудит этого файла. Создалось 16 одинаковых событий: Выполнена попытка получения доступа к объекту. Имя журнала: Безопасность, Источник: Microsoft Windows security auditing, Код события: 4663... даже время одно до секунды!? Нельзя удалять/создавать этот файл, только менять.
27 mistеr
 
24.03.21
17:16
(26) Не лезь в аудит файловой системы. Потом не вылезешь, поверь. :)
28 Mikhail Volkov
 
26.03.21
06:48
(25) Работает под обычным пользователем 1С! Спс.
29 Arbuz
 
31.03.21
17:51
(0) На самом деле это возможно.
Создаёте свой журнал либо через New-EventLog мерзкого PowerShell, либо напрямую через не менее мерзкий реестр, например https://winitpro.ru/index.php/2011/08/24/sozdaem-sobstvennyj-zhurnal-sobytij-v-windows. Само собой от админских прав, но это однократная операция.
Далее задаёте права на этот лог, например через wevtutil sl %YOUEVENTLOG% /ca:%SDDL%. Мерзкий SDDL можно посмотреть, например здесь https://habr.com/ru/company/pm/blog/442662.
Далее пишете события от того пользователя которому разрешили на предыдущем шаге, например eventcreate /U %USER% /P %PASSWORD% /T INFORMATION /ID 1 /L %YOUEVENTLOG% /SO "сеанс_1С" /D "Моё супер событие из 1С". Если права дали для текущего пользователя, то имя/пароль можно не указывать.
30 Mikhail Volkov
 
24.09.21
14:44
Замечено, что при некорректном закрытии сеанса RDP без закрытия самой 1С последним пользователем, предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. 1С все же закрывается, но без запуска задания: ЗапуститьПриложение("SchTasks /run /tn ВыгрузкаАльфаАвто"); Хотелось бы чтобы оно запускалось при событии с кодом 4634 категории задачи "Выход из системы" журнала Безопасность. Это при простом настраивании параметров задания: https://ibb.co/sJ8ZQxC
Но таких событий много, хотелось бы сделать настраиваемое по конкретному пользователю (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего), или группе Пользователи 1С. Но как? Возможно ли достать из события Имя учетной записи?
31 Kassern
 
24.09.21
14:54
(30) "при некорректном закрытии сеанса RDP без закрытия самой 1С последним пользователем, предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. 1С все же закрывается"
Удивительно не правда ли?)) А вы попробуйте нажать резет на компе с включенной 1с, вы очень удивитесь, но ПриЗавершенииРаботыСистемы() тоже не отработает)
Я правильно понимаю, все все это дело уже который месяц "любите", чтобы бекапы настроить вечерние?
32 Mikhail Volkov
 
24.09.21
15:06
(31) Да, чтобы автоматизировать dt-выгрузку базы на случай выхода из строя SQL-сервера, при чем сразу же по завершению работы последнего пользователя.
33 VladZ
 
24.09.21
15:13
(32) Вот заняться вам нечем.

Делайте чаще бэкап на стороне SQL и не разрушайте мозг себе и людям.
34 Kassern
 
24.09.21
15:14
(32) а что мешает делать теневые копии CD файлов? Это можно делать и когда люди работают. И сама 1с рекомендует именно так бекапить файловые базы. А дт это такое...Не факт еще, что развернется
35 Mikhail Volkov
 
24.09.21
15:27
(34) SQL-бекапы делаются, dt-выгрузка нужна на случай выхода из строя SQL-сервера. Был такой печальный случай.
36 VladZ
 
24.09.21
15:46
(35) Разверни резервный SQL-сервер на более-менее быстрой тачке.  Будет возможность временно "завести" критичные базы, пока ведутся работы по восстановлению SQL-сервера.
37 Mikhail Volkov
 
24.09.21
18:45
Вроде нашел Фильтрация событий в журналах Windows по имени пользователя https://winitpro.ru/index.php/2016/08/10/filtraciya-sobytij-v-zhurnalax-windows-po-imeni-polzovatelya/, но что-то ни так.
38 vladmenleo
 
25.09.21
06:16
(0) на vbs
Const EVENT_SUCCESS = 0
Set objShell = Wscript.CreateObject("Wscript.Shell")
objShell.LogEvent EVENT_SUCCESS, _
    "Это мое событие в журнале регистрации"
39 Mikhail Volkov
 
25.09.21
11:27
(29) (38) Спс, что откликнулись. Но первоначальный вопрос уже решен: 1С может сама запускать задание (23) под любым пользователем без административных прав ОС. Просто возник вопрос (30) напрямую не касающийся 1С, а эта ветка Админская.
В общем в Изменении фильтра событий отметил Сведения, код событий заменил на 4647 - Выход, запрошенный пользователем (много ложных 4634 - Выполнен выход учетной записи из системы), в XML получил:
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(Level=4 or Level=0) and (EventID=4647)]]</Select>
  </Query>
</QueryList>
по примеру http://specnix.ru/microsoft/filtering-win2k8event-security-log-by-account дописал туда условие для Имя учетной записи кассира (надо бы всех пользователей группы 1С, существующих и новых - возможно?), получил:
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(Level=4 or Level=0) and (EventID=4647)]] and *[EventData[Data[@Name='TargetUserName']='ИмяКассира']]</Select>
  </Query>
</QueryList>
Посмотрю, что получится...
40 Mikhail Volkov
 
26.09.21
15:33
Вроде все получилось. Смотрю вчерашний журнал планировщика заданий (категория задачи):
1. Задача вызвана пользователем - по времени совпадает с событием по ЖР 1С: Завершение работы с базой кассира.
2. Обработчик задач получил сообщение с запросом на запуск задачи
3. Задача запущена
4. Действие запущено
5. Обработка созданной задачи
7. Задача вызвана событием - по времени совпадает с событием по журналу Безопасность: Выход из системы.
8. Запрос на запуск проигнорирован, экземпляр уже выполняется (Предупреждение)
9. Не удается запустить задачу (Ошибка)
10. Действие выполнено
11. Задача завершена
Вчерашний случай корректного завершения 1С последним пользователем, конфигуратор закрыт (если был открыт) самой 1С. При некорректном завершении все началось бы с пункта 7, и завершилось бы "Ошибка разделенного доступа к информационной базе".
Есть ли другой способ закрыть конфигуратор? Подробнее в Отключить сеанс
41 DrZombi
 
гуру
26.09.21
18:12
(0) Зачем, конечно постов 40, но зачем, вопрос актуален :)
...Тенденция "Надо", не устраивает мое любопытство :)
42 DrZombi
 
гуру
26.09.21
18:14
(11) Вы тоже спросили, зачем... И тоже молчание, ТС не хочет обозначит бред своей затеи, хотя может мы могли бы ему помочь в решении его задачи :)
43 DrZombi
 
гуру
26.09.21
18:16
(21) >>> При завершении работы последнего пользователя 1С, и закрытия его сеанса RDP.

И опять "ЗАЧЕМ, это вам надо?", Задача сама по себе бредятина :)
44 DrZombi
 
гуру
26.09.21
18:22
(24) >>>> Не все пользователи дисциплинированны, завершают свой сеанс.

Настройка лимитов (таймаутов) для RDP/RDS сессий в Windows
https://winitpro.ru/index.php/2020/05/25/rdp-session-limits/

Настройка таймаутов RDP-сессий с помощью GPO
https://windowsnotes.ru/activedirectory/nastrojka-tajmautov-rdp-sessij-s-pomoshhyu-gpo/

...
Порой решение даже не в 1С :)
45 DrZombi
 
гуру
26.09.21
18:27
(30) >>>>Замечено, что при некорректном закрытии сеанса RDP без закрытия самой 1С последним пользователем, предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется.
>>>Хотелось бы чтобы оно запускалось при событии с кодом 4634

А я ы хотел ходить по воде, мечты, мечты :)...
Смиритесь ;)

Тут возникает вопрос, зачем вам "корректное" завершение 1С?
Что вы отслеживаете этим?

...Вот только не несите чепуху, про отслеживание времени работы пользователя по началу работы и по завершению оной... :DDDD
...Ох сколько копий было сломано об желании подсчитывать, то что не считается...
46 DrZombi
 
гуру
26.09.21
18:29
(32) >>> Да, чтобы автоматизировать dt-выгрузку базы на случай выхода из строя SQL-сервера

О_о... другого я не мог даже предположить, вы сударь бредите... :DDDD
47 DrZombi
 
гуру
26.09.21
18:32
+ (0) ТС, вот вам пример.

Тонкая настройка ежедневного резервного копирования базы данных 1С средствами SQL ver. 2014 (SP3) - 12.0.6024.0 (X64)
https://infostart.ru/1c/articles/1131561/

Может наведет вас на мысль, что SQL делает бекапы куда лучше, вас :)
48 ДедМорроз
 
27.09.21
02:31
Есть такая вещь как WMI
Можно вешать команды на любые события в системе,и они будут выполняться.
И также RDP прекрасно можно мониторить,если это нужно.
49 Mikhail Volkov
 
27.09.21
08:28
(48) Спс, посмотрю, если понадобится...
(41) Еще в (39) писал, что первоначальный вопрос уже решен: 1С может сама запускать задание (23) под любым пользователем без административных прав ОС. Сейчас остался вопрос: Есть ли другой способ закрыть конфигуратор? Например, из командной строки, подробнее в Отключить сеанс
50 Kassern
 
27.09.21
09:18
(49) а разве конфигуратор не тупо процесс? Что мешает его из командной строки убить под админом? даже если вы найдете способ закрывать конфигуратор, то учтите следующее:
К примеру ваш программист целый день с утра до вечера писал крутую обработку. Потом поехал домой и решил удаленно еще чутка ее дописать, чтобы завтра "взлетела". А вы такой хлоп и кончили ему кофигуратор, пока он в нем в отладке херачил. Как вы думаете, какой шанс, что прог полезет в TMP и будет там искать временный файл обработки, а не запустит снова 1с и не получит вместо обработки битый файлик с нулями?))
51 Kassern
 
27.09.21
09:22
(50) если база скульная, то можно же тупо по COM цепляться к кластеру и управлять сеансами в базах. К примеру грохнуть все для монопольного доступа.
52 Mikhail Volkov
 
27.09.21
10:43
(50) Пакетный bat-файл запускается заданием планировщика "При событии", выполняется под СИСТЕМА. Как выглядит команда закрытия конфигуратора нужной базы?
У нас изменения непосредственно в конфигураторе рабочей базы не пишутся, только в копии базы (как правило не на рабочем сервере). Только готовые, проверенные изменения подгружаем в конфигуратор рабочей базы.
(51) По COM запускать обработку Отключить сеанс - сложно как-то, надеюсь есть способы по проще...
53 Kassern
 
27.09.21
10:51
(52) речь шла про внешнюю обработку, если вырубить конфигуратор, ну или тупо сеанс РДП завершить, когда в этот момент идет отладка внешней обработки, то будет бядааа. Я все понимаю про хранилище там и тестовые базы, но на практике внешние обработки могут и на продукте дорабатывать(конфа при этом не меняется), если их действие не влечет изменению данных к примеру. Делается это, чтобы работать с актуальными данными. А вы так бахните процесс и дальше кодер с красными от крови глазами будет искать того умельца, кто это сделал)
54 DrZombi
 
гуру
27.09.21
10:56
(53) Вы понимаете, что человек в (0) имея в распоряжении SQL, пытается делать бекапы средствами 1С? :)

(52) >>> По COM запускать обработку Отключить сеанс - сложно как-то, надеюсь есть способы по проще...

Предлагаю вам пригласить специалиста, самое простое, это когда вместо вас спец. сделает все как оно должно быть.
Резервное копирование 1С средствами MS SQL.
https://infostart.ru/1c/articles/173494/
55 Kassern
 
27.09.21
10:58
(54) я это прекрасно понимаю, уже в нескольких ветках указывал ему на то, что он пытается добраться до задницы через гланды))) Сейчас еще описал, что будет если конфигуратор хлопнуть не уведомив того, кто там работает)
56 ptiz
 
27.09.21
11:00
(32) Зачем именно dt? Уж если очень надо - просто запускать батник каждые 3 минуты который будет создавать dt, если тот устарел.
57 Kassern
 
27.09.21
11:00
(54) насколько я понял, человек 1 раз не смог оперативно бекап развернуть со скуля. Из-за этого скорее всего был простой, вот он и решил пойти таким путем, вместо того, чтобы решить проблемы со скулем. Это как один раз обжечься об плиту, а потом к ней не подходить и готовить в микроволновке, вместо того, чтобы научиться пользоваться плитой)
58 Mikhail Volkov
 
27.09.21
12:04
(54) См. (35)
59 ДенисЧ
 
27.09.21
12:07
Интересно... А как можно сделать dt, если сдох sql-сервер?
60 Kassern
 
27.09.21
12:10
(59) Вот ТС и хочет при мертвом скуле развернуть dtшку ночную и заставить юзверов в файловой работать пока скуль чинится)
61 pechkin
 
27.09.21
12:13
если чел 30 пользователей то работать ну никак не смогут
62 Kassern
 
27.09.21
12:15
в общем я к тому, что проще скулем научиться пользоваться и быстро восстанавливать случись что, чем ковырять систему, выгонять юзверов, делать DTшки, которые не факт, что развернутся, далее переходить на файловый вариант (что тоже время) еще и вопрос с лицензиями встает, так как по любому на кластере торчат.
63 Mikhail Volkov
 
27.09.21
13:36
(62) Ну, да как выглядит команда закрытия конфигуратора нужной базы?
64 Kassern
 
27.09.21
13:41
65 Kassern
 
27.09.21
13:42
(63) по факту команда выглядит следующим образом, пишите в корпоративную почту, что в такое то время будет производится регламентное обслуживание, просьба закрыть конфигуратор и выйти из 1с. Далее за 30мин еще раз предупреждаете об этом. А далее через кластер всех выкидываете.
66 Kassern
 
27.09.21
13:43
(65) в этом случае программист с одичавшими глазами не будет рвать волосы на груди, потеряв свои наработки. А если и будет, то тут его вина, раз письмо с пометкой Важное не прочитал.
67 Mikhail Volkov
 
27.09.21
15:03
(64) Завершает процесс по его ID (PID) или имени образа.
TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]]
         { [/FI <фильтр>] [/PID <процесс> | /IM <образ>] } [/T] [/F]
Если по имени 1cv8.exe, то завершит все процессы 1С, ни только конфигуратор. Как фильтр наложить?
Встречал подобную команду в v8: Как завершить сеанс текущего пользователя с помощью командной строки?
68 ptiz
 
27.09.21
15:05
(63) За открытый конфигуратор в неположенное время - отбирать доступ.
69 Mikhail Volkov
 
28.09.21
08:23
(68) Да только я и наблюдаю в конфигураторе ЖР, нет ли событий с ошибками, забываю отключать. Пора бросать это дело, смотреть ЖР в обычном режиме 1С.
В общем нем простых команд командной строки проверяющих открыт ли конфигуратор, ни закрывающих его, а также проверяющих есть кто-то в базе? Жаль...
70 Kassern
 
28.09.21
09:24
(69) Вы должны понимать, что винде пофиг, что это, тонкий клиент запущен, или толстый, или вообще конфигуратор. Для нее это всего лишь еще один процесс. Для того, чтобы отключить сеанс именно с конфигуратором в нужном кластере и для нужной базы, нужно цепляться к кластеру по COM. Там вы без проблем отфильтруете как вам надо и завершите нужные сеансы.
71 Mikhail Volkov
 
28.09.21
17:58
(70) Через COM-соединение нужно создавать специальную базу 1С, которая будет проверять наличие пользователей в нужной базе, и проверять открыт ли конфигуратор? Просто COM-соединениями кроме 1С не занимался.
Сейчас запуск задания на dt-выгрузку по событию с кодом 4647 (Выход из системы) конкретного пользователя: кассира - обычно он последний закрывает кассовую смену (39). В общем случае надо сделать по любому пользователю группы User1C (но как?). Но тогда при событии "Выход из системы" понадобится проверка: последний ли пользователь, есть еще кто-то в базе.
72 Mikhail Volkov
 
29.09.21
09:11
Если для COM-соединения нужно создавать специальную базу 1С, то сложно... есть способы попроще (ссылку на примеры)?
Еще вопрос: в bat-файле в командной строке "C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server\1C" /N"Администратор"... прописан Администратор - служебный пользователь, под которым никто не работает. А если пропишу свое имя, будет ли жаловаться, что конфигуратор открыт подомною? Не понимаю, как конфигуратор может мешать dt-выгрузке?
73 Kassern
 
29.09.21
09:25
(72) для выгрузки dt файла нужен монопольный доступ к базе. Вы когда нибудь пробовали открывать 2 конфигуратора от одной базы? Если да, то понимаете, что второй экземпляр вам 1ска не даст запустить. А теперь погуглите и посмотрите что значат параметры командной строки, которую вы написали, а именно "DESIGNER". По факту вы неявно запускаете конфигуратор бат файлом и делаете бекап. Попробуйте запустить ваш батник с запущенным конфигуратором, я очень удивлюсь, если у вас dt выгрузится)
74 Mikhail Volkov
 
29.09.21
09:47
(73) Нет, не пробовал, поэтому спросил. А по (72) для COM-соединения нужно создавать специальную базу 1С?
75 Kassern
 
29.09.21
10:19
(74) по COM вы можете внешней обработкой поотрубать все сеансы кроме вашего а потом закрыть текущую базу. Есть еще проще способ, можно установить запрет на определенное время в кластере, с кодом разрешения. А потом без зазрения совести подключиться по батнику с кодом разрешения, делать бекам и разрешить доступ к базе.
76 Mikhail Volkov
 
29.09.21
10:42
(75) Это понятно. Вот только для COM-соединения нужно создавать специальную базу 1С, или как-то по другому?