Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Отловить простой системы и выход из него

Ответить
Настройки темы
CMD/BAT - Отловить простой системы и выход из него

Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328


Конфигурация

Профиль | Отправить PM | Цитировать


Даже не знаю с какого боку зайти уже. Что требуется:
При простое = 600s (в этот момент гасится монитор) - запуск батника.
При выходе из простоя - запуск другого батника.

Пробовали реализовать это с помощью коллективного разума средствами системы - не вышло.
Т.е. если бы что-то писалось в журнал при, допустим, гашении и включении монитора, то можно было бы завесить на это событие задание в планировщике, но ничего не пишется...
Удалось реализовать только так: в св-вах заставки ставим время и флажок "Начинать с экрана входа в систему", в этом случае происходит блокировка, а на блокировку/разблокировку легко назначается нужное задание в планировщике. Но это не удобно, т.к. надо выбирать учётную запись при разблокировке.
Под простоем понимается отсутствие нажатий на клавиши, при любой загруженности процессора и HDD,
а не так, как это себе представляет планировщик :)
Условия простоя
Можно выбрать условие, позволяющее запуск задания только в том случае, если на момент активации триггера компьютер находится в состоянии простоя в течение указанного времени. При настройке этого условия также необходимо задать время ожидания (после активации триггера задания), по истечению которого компьютер будет возвращаться в состояние простоя.

Служба планировщика заданий проверяет, не находится ли компьютер в состоянии простоя, каждые 15 минут. Состоянием простоя считается состояние компьютера, при котором запущена заставка. Если заставка не запускается, считается, что компьютер находится в состоянии простоя при 0% использования процессора и 0% активности диска в течение 90% из последних 15 минут при отсутствии ввода команд с помощью клавиатуры или мыши. Если служба планировщика заданий обнаруживает, что компьютер находится в состоянии простоя, служба начинает ожидать ввода команды пользователем, чтобы отметить конец состояния простоя.

Если задание запускается только в том случае, если компьютер находится в состоянии простоя в течение 30 минут, и задание в течение 10 минут ожидает, пока компьютер перейдет в состоянии простоя, то задание запуститься через 5 минут только в том случае, если на момент активации триггера компьютер находился в состоянии простоя в течение 25 минут. Задание не будет запущено, если компьютер переходит в состояние простоя через 5 минут после активации триггера.

Любые идеи?
ОС: Windows 7, на всякий случай.

Отправлено: 03:39, 25-05-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Morpheus:
можно ли сделать вместо запуска батника (или из этого батника), чтобы просто писалось какое-нибудь событие в журнал »
если из батника, то можно VBS-скриптом: Logging an Event... впрочем, для WSH есть свой WMI потребитель

Цитата Morpheus:
Подскажите, плз, где косяк? »
у меня и в таком виде работает, только нужно подправить SELECT, как подсказал Iska, или так:
Код: Выделить весь код
    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
Код: Выделить весь код
    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:04, 27-05-2010 | #31



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


amel27, т.е. так должно быть?
Код: Выделить весь код
#pragma namespace ("\\\\.\\Root\\subscription")

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstart.cmd", и
// присвоение ему псевдонима $SCRSTARTCONSUMER

instance of CommandLineEventConsumer as $SCRSTARTCONSUMER
{
	Name = "ScreenSaverStartConsumer";
	CommandLineTemplate = "D:\\MOF\\scrstart.cmd %TargetInstance.Name%";
	WorkingDirectory = "D:\\MOF";
};    

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstop.cmd",
// присвоение ему псевдонима $SCRSTOPCONSUMER

instance of CommandLineEventConsumer as $SCRSTOPCONSUMER
{
	Name = "ScreenSaverStopConsumer";
	CommandLineTemplate = "D:\\MOF\\scrstop.cmd %TargetInstance.Name%";
	WorkingDirectory = "D:\\MOF";
};    

// Создание экземпляра фильтра событий 
// для создания нового процесса *.SCR
// и присвоение ему псевдонима $SCRSTARTFILTER

instance of __EventFilter as $SCRSTARTFILTER
{
    Name = "ScreenSaverStartFilter";
    EventNamespace = "\\\\.\\root\\cimv2";  

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра фильтра событий 
// для удаления процесса *.SCR
// и присвоение ему псевдонима $SCRSTOPFILTER

instance of __EventFilter as $SCRSTOPFILTER
{
    Name = "ScreenSaverStopFilter";
    EventNamespace = "\\\\.\\root\\cimv2";  

    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра связи между фильтром и подписчиком
// события запуска хранителя экрана

instance of __FilterToConsumerBinding
{
     Consumer = $SCRSTARTCONSUMER;
     Filter = $SCRSTARTFILTER;
};

// Создание экземпляра связи между фильтром и подписчиком
// события остановки хранителя экрана

instance of __FilterToConsumerBinding
{
     Consumer = $SCRSTOPCONSUMER;
     Filter = $SCRSTOPFILTER;
};

Отправлено: 13:52, 27-05-2010 | #32


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Morpheus:
так должно быть? »
не то чтобы должно, но желательно

Отправлено: 15:45, 27-05-2010 | #33


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


amel27, логи создаются, а событие в журнале найти не могу.

UPD: нашел, из-за чего не работал код из #30 - EventType = 3 не пишется, если = 1 или 4 - пишется.
Теперь другой проблем - событие Start создаётся 2 раза и одновременно пишется Stop. Не подскажете?

Последний раз редактировалось Morpheus, 28-05-2010 в 04:07.


Отправлено: 17:20, 27-05-2010 | #34


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Наверное, потому что нет такого значения EventType:
читать дальше »

Цитата MSDN:

EventType
Data type: uint32
Access type: Read/write
Qualifiers: Not_Null

Type of event. This parameter can have one of the values in the following table, which are defined in Winnt.h and Ntelfapi.h.

Value Meaning:
EVENTLOG_SUCCESS Successful event
EVENTLOG_ERROR_TYPE Error event
EVENTLOG_WARNING_TYPE Warning event
EVENTLOG_INFORMATION_TYPE Information event
EVENTLOG_AUDIT_SUCCESS Success audit type
EVENTLOG_AUDIT_FAILURE Failure audit type
Цитата WinNT.h:
Код: Выделить весь код
…
//
// The types of events that can be logged.
//
#define EVENTLOG_SUCCESS                0x0000
#define EVENTLOG_ERROR_TYPE             0x0001
#define EVENTLOG_WARNING_TYPE           0x0002
#define EVENTLOG_INFORMATION_TYPE       0x0004
#define EVENTLOG_AUDIT_SUCCESS          0x0008
#define EVENTLOG_AUDIT_FAILURE          0x0010
…
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 28-05-2010 | #35


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


Цитата Iska:
The types of events that can be logged. »
Вот этой информации мне и не хватало, для полной картины. Спасибо!

Остаётся разобраться с дублированием событий.

Отправлено: 14:02, 28-05-2010 | #36


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Morpheus:
Остаётся разобраться с дублированием событий. »
возможно, для одного фильтра зарегистрированы ДВА потребителя с разными именами, необходимо вспомнить и удалить все объекты по примеру из поста #22 (чтобы сообщения не появлялись вовсе), после чего провести компиляцию MOF-файла

P.S. если при компиляции встречается ошибка (несуществующий объект), то работа MofComp аварийно прекращается (т.е. для корректного удаления должны существовать ВСЕ описанные в MOF-файле объекты) - по этой причине после удаления могут оставаться "хвосты"

P.P.S есть удобные утилиты для визуальной работы с событиями (WMI Administrative Tools), но официально заявлена только поддержка XP
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:28, 28-05-2010 | #37


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


amel27, хм, любопытно. Проверил на хосте вместо виртуалки, 1 старт и 1 стоп. М.б. есть способ вывести всех потребителей, для всех фильтров, в командной строке? В WMI Administrative Tools пустота, ставил в режиме совместимости, от админа, в профиль.

Удалил-создал-удалил-создал-удалил-создал с новыми именами - всё пришло в норму.

Теперь такой вопрос: Registering for Power Events (Windows)
Цитата:
GUID_MONITOR_POWER_ON - 02731015-4510-4526-99e6-e5a17ebd1aea
The monitor on/off notification indicates when the primary system monitor is on or off. This notification is useful for components that actively render content to the display device, such as media visualization. These applications should register for this notification and stop rendering graphics content when the monitor is off to reduce system power consumption. The Data member is a DWORD that indicates the current monitor state.

0x0
The monitor is off.

0x1
The monitor is on.
Можно ли прикрутить с помощью MOF или это уже из области С++?
Хочется отвязаться от заставки, которую я не использую, и привязаться к отключению/включению моника.

Отправлено: 00:11, 29-05-2010 | #38


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Morpheus:
Можно ли прикрутить с помощью MOF или это уже из области С++? »
поддержка состояния монитора через WMI заявлена, но не поддерживается, готовых (бесплатных) COM-объектов для использования в WSH не попадалось, а лобовое решение требует языков с поддержкой Win32 API: С++, Basic, (возможно) AutoIT и т.п.

Цитата Morpheus:
В WMI Administrative Tools пустота, ставил в режиме совместимости, от админа, в профиль. »
у меня под W7 запустилось почти сразу и в обычном режиме... правда, только в режиме чтения, для полного доступа нужно запустить IE с правами админа и вручную вбить в строку адреса типа: "C:\Program Files\WMI Tools\EventReg.htm", указать контекст: "root\subscription" и в ниспадающем списке выбрать тип объектов (Consumers/Filters), на правой панели будут отражены текущие привязки объектов
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:56, 29-05-2010 | #39


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


Цитата amel27:
поддержка состояния монитора через WMI заявлена, но не поддерживается »
Жаль, спасибо!
Цитата amel27:
у меня под W7 запустилось почти сразу и в обычном режиме... правда, только в режиме чтения, для полного доступа нужно запустить IE с правами админа и вручную вбить в строку адреса типа: "C:\Program Files\WMI Tools\EventReg.htm", указать контекст: "root\subscription" и в ниспадающем списке выбрать тип объектов (Consumers/Filters), на правой панели будут отражены текущие привязки объектов »
Спасибо, работает!

Отправлено: 19:43, 29-05-2010 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Отловить простой системы и выход из него

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PantherXP - создание образа системы и развертывание из него (статья) alexandr100 Автоматическая установка Windows 2000/XP/2003 174 05-01-2014 18:42
Происходит автоматический выход из системы каждую минуту 06072009 Microsoft Windows Vista 2 01-04-2011 15:48
Toshiba Qosmio X300-14X и двух-канальный ли HDMI выход у него ? XPOM Ноутбуки 2 15-02-2010 14:02
Загрузка - глюк после приветствия "выход из системы" werify Microsoft Windows 2000/XP 1 27-08-2009 14:14
Самостоятельное изменение диалогов Завершение работы и Выход из системы prokazzza Проект WinStyle 1 04-08-2009 01:19




 
Переход