Перезапуск устройства
Всем доброго времени суток.
Прошу помочь с созданием батника. После входа в Windows я запускаю батник с помощью планировщика задач. В корне диска "C" располагается файл "erorrlog.txt". Сам батник должен работать следующим образом: 1. Получить дату изменения файла "erorrlog.txt" 2. Присвоить полученное значение даты изменения файла "erorrlog.txt" переменной "Х" 3. Цикл: получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если равно, то снова получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если нет, то отключить устройство, ID которого "DEVICE_ID", далее скорее всего нужна будет задержка на 3 сек, затем включить это же устройство. 4. Вернуться в пункт 1. |
svoping, не пишите, что и как должен делать «батник» — переменные, файлы в корне системного раздела, циклы, задержки и т.п. Опишите Вашу задачу.
|
Iska, попробую телепатировать что же svoping имел ввиду: если работа некого устройства завершилась с ошибкой, эта ошибка пишется в лог, изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать. Если телепатия не подвела, то, во-первых, лучше отказаться от затеи плодить текстовые файлы в корне диске (в идеале и вовсе запретить создавать что-либо в корне диска за исключением папок - безопасность, какбэ), а логирование перенести в журнал событий (если не ошибаюсь, это можно сделать sysmon'ом), а смотреть psloglist'ом соответсвующий журнал: если ошибка есть - devcon в помощь. А вообще, если устройство представлено каким-то сервисом в системе, то проще в services.msc выставить автоматический перезапуск службы при возникновении ошибки. На этом телепатия заканивается.
|
Имеем некую программу предназначенную для работы с определенным устройством. Устройство подключено по USB(эмуляция com-порта). Программа обращается к устройству, и если не получает ответа от него, то вносит информацию об ошибке в файл "erorrlog.txt", изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать."
Вот окончательный вариант Про диск C понял, его я указал лишь, для примера, на самом деле "erorrlog.txt" будет храниться С:\DEVICE\erorrlog.txt |
Гонять цикл в командном сценарии (а ведь задача то и подразумевает) в данном случае не самое лучшее, что можно выдумать. Берете PowerShell, натравливаете FileSystemWatcher на нужный файл и в сущности - все. Если файл был изменен, перезапускаем USB'ека через devcon. Что-то в этом роде. Время трошки освободится, напишу подробнее.
|
Товарищи решение на PowerShell не совсем удобно, так как парк ПК большой, и достаточно много, около 20 ПК, на которых стоит Windpws XP
|
Цитата:
P.S. Если никак не хотите PowerShell, то, если хорошо попросите коллегу greg zakharov, он Вам сделает и отдельный исполняемый модуль с потребным функционалом. |
Цитата:
Скрытый текст
Код:
@echo off В теории жонглировать USB'еками можно через WMI, а именно Win32_USBControllerDevice. Насколько помню там есть метод Reset, но вроде бы он как не реализован в ранних версиях Windows. Проверять, честно говоря, не хоцца. Так что... вектор Вам указали. Цитата:
|
svoping,
если хотите или удобнее контролировать по дате изменения, то можно и так. В коде дата изменения файла запишется при первом запуске во временный файл и она же будет записываться и при следующих запусках, но как только поменяется - будет выведена строка "Отключаем" и удаляется временный файл (паузу в рабочем варианте можно убрать), реальное отключение думайте как сделать: Код:
@echo off минус в том что один раз вначале надо запустить, рабочий процесс будет идти со второго запуска |
Время: 21:16. |
Время: 21:16.
© OSzone.net 2001-