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

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

Ответить
Настройки темы
CMD/BAT - Перезапуск устройства

Новый участник


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

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


Всем доброго времени суток.
Прошу помочь с созданием батника.
После входа в Windows я запускаю батник с помощью планировщика задач. В корне диска "C" располагается файл "erorrlog.txt". Сам батник должен работать следующим образом:
1. Получить дату изменения файла "erorrlog.txt"
2. Присвоить полученное значение даты изменения файла "erorrlog.txt" переменной "Х"
3. Цикл: получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если равно, то снова получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если нет, то отключить устройство, ID которого "DEVICE_ID", далее скорее всего нужна будет задержка на 3 сек, затем включить это же устройство.
4. Вернуться в пункт 1.

Отправлено: 23:22, 01-06-2017

 

Ветеран


Contributor


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

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


svoping, не пишите, что и как должен делать «батник» — переменные, файлы в корне системного раздела, циклы, задержки и т.п. Опишите Вашу задачу.

Отправлено: 01:17, 02-06-2017 | #2



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

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


Старожил


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

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


Iska, попробую телепатировать что же svoping имел ввиду: если работа некого устройства завершилась с ошибкой, эта ошибка пишется в лог, изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать. Если телепатия не подвела, то, во-первых, лучше отказаться от затеи плодить текстовые файлы в корне диске (в идеале и вовсе запретить создавать что-либо в корне диска за исключением папок - безопасность, какбэ), а логирование перенести в журнал событий (если не ошибаюсь, это можно сделать sysmon'ом), а смотреть psloglist'ом соответсвующий журнал: если ошибка есть - devcon в помощь. А вообще, если устройство представлено каким-то сервисом в системе, то проще в services.msc выставить автоматический перезапуск службы при возникновении ошибки. На этом телепатия заканивается.

Отправлено: 09:10, 02-06-2017 | #3


Новый участник


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

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


Имеем некую программу предназначенную для работы с определенным устройством. Устройство подключено по USB(эмуляция com-порта). Программа обращается к устройству, и если не получает ответа от него, то вносит информацию об ошибке в файл "erorrlog.txt", изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать."
Вот окончательный вариант
Про диск C понял, его я указал лишь, для примера, на самом деле "erorrlog.txt" будет храниться С:\DEVICE\erorrlog.txt

Последний раз редактировалось svoping, 02-06-2017 в 10:04.


Отправлено: 09:51, 02-06-2017 | #4


Старожил


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

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


Гонять цикл в командном сценарии (а ведь задача то и подразумевает) в данном случае не самое лучшее, что можно выдумать. Берете PowerShell, натравливаете FileSystemWatcher на нужный файл и в сущности - все. Если файл был изменен, перезапускаем USB'ека через devcon. Что-то в этом роде. Время трошки освободится, напишу подробнее.

Отправлено: 10:20, 02-06-2017 | #5


Новый участник


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

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


Товарищи решение на PowerShell не совсем удобно, так как парк ПК большой, и достаточно много, около 20 ПК, на которых стоит Windpws XP

Отправлено: 19:54, 02-06-2017 | #6


Ветеран


Contributor


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

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


Цитата svoping:
и достаточно много, около 20 ПК, на которых стоит Windpws XP »
Это: а) не «много», и б) есть PowerShell 2.0, который работает и на Windows XP.

P.S. Если никак не хотите PowerShell, то, если хорошо попросите коллегу greg zakharov, он Вам сделает и отдельный исполняемый модуль с потребным функционалом.

Отправлено: 22:09, 02-06-2017 | #7


Старожил


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

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


Цитата svoping:
Товарищи решение на PowerShell не совсем удобно
Неудобно - это когда соседские дети на тебя похожи или когда пытаешься решать проблемы на работе за чужой счет, вот это неудобно. Ничто не мешает по сетке развернуть PS (на ХР потолок - вторая версия, но ее хватит более чем), чай ведь сам установочный пакет в виде КВ распространяется. Но раз джинсы жмут в интимных местах, то берете пять сотен и переводите их мне на счет devcon (его сирано также придется раскидать по сети), а далее ваяете нечто вроде:
Скрытый текст
Код: Выделить весь код
@echo off
  setlocal enabledelayedexpansion
    set "log=D:\src\foo"
    :monitor
      call:sleep 3
      call:getstamp !log!
      goto:monitor
  endlocal
exit /b

:getstamp
  for /f %%i in ("%~1") do set "ts=%%~ti"
  if not defined x set "x=!ts!"
  if /i "!ts!" equ "!x!" (
    echo:same
  ) else (
    echo:not same
    <nul set /p="Restarting USB device "
    rem сюбственно, здесь реализуется логика перезапуска
    set "x=!ts!"
    echo:[at !time:~0,-3!] . . . OK
  )
exit /b

:sleep
  echo:%~1|>nul findstr /xrc:"[0-9].*"&&(
    if %~1 equ 0 goto:break
    set /a "s=%~1/2+1"
    w32tm /stripchart /computer:localhost /period:1^
      /dataonly /samples:!s!>nul
    <nul set /p="Standby . . . "
  )||(
    :break
    rem
  )
exit /b

В теории жонглировать USB'еками можно через WMI, а именно Win32_USBControllerDevice. Насколько помню там есть метод Reset, но вроде бы он как не реализован в ранних версиях Windows. Проверять, честно говоря, не хоцца. Так что... вектор Вам указали.
Цитата Iska:
если хорошо попросите
И то возможно.

Последний раз редактировалось greg zakharov, 02-06-2017 в 22:26.


Отправлено: 22:19, 02-06-2017 | #8


Ветеран


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

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


svoping,
если хотите или удобнее контролировать по дате изменения, то можно и так. В коде дата изменения файла запишется при первом запуске во временный файл и она же будет записываться и при следующих запусках, но как только поменяется - будет выведена строка "Отключаем" и удаляется временный файл (паузу в рабочем варианте можно убрать), реальное отключение думайте как сделать:
Код: Выделить весь код
@echo off
call :# "errorlog.txt"
pause& exit

:#
 if exist tmp <tmp set/p dw=
 if not "%~t1"=="%dw%" (
  echo Отключаем& pause& del tmp& exit
 ) else (
  >tmp echo %~t1
 )
exit /b
errorlog.txt: мне показалось что именно такое имя должно было бы быть против erorrlog.txt
минус в том что один раз вначале надо запустить, рабочий процесс будет идти со второго запуска

Последний раз редактировалось alpap, 03-06-2017 в 12:20.


Отправлено: 10:12, 03-06-2017 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Devcon. Перезапуск устройства с использованием IF и FOR ivantresh Скриптовые языки администрирования Windows 2 04-01-2017 09:32
Драйвер - Некорректно работают подключаемые устройства. По типу внешние запоминающие устройства ScRawLeR73 Microsoft Windows 7 9 14-04-2014 18:29
Перезапуск программы alleo AutoIt 9 21-02-2011 20:25
Перезапуск Эксплорера... FlatX007 Хочу все знать 19 28-09-2008 15:44
Перезапуск, зависания. DerZonder Непонятные проблемы с Железом 33 18-09-2007 12:38




 
Переход