Скрипт получения отчета о проверке диска (CHKDSK)

  • Автор темы Автор темы УП 7151
  • Дата начала Дата начала
У

УП 7151

Dragokas, Я уже отказался от продолжения писать вики-статьи для Microsoft Community, мне с вами и OSzone.net,CyberForum.ru значительно интересней и полезней. Но тему чекдиска обещал по возможности добить. Поможешь ?!
Загляни в тему https://safezone.cc/threads/pomogite-napisat-statju.23990/page-4#post-183388, посты 78, 83 и 84.
Не по теме:
И на этом будем с Майкрософтом завязывать. В конце концов, я смотрю ребята сами то рогами не шевелят, хотят, что бы кто то за них всё делал. Пусть тогда бабло платят.
 
И на этом будем с Майкрософтом завязывать.
Ага, вы им назло, у себя еще и windows удалите.
п.с.
извиняюсь, но не мог я тут не съязвить :Yahoo:
Ну а если серьезно, то какая разница где опыта набираться, главное что-бы знания прирастали, ведь так?))
 
Итак, вот вариант, который у нас в полезных примерах:
Просмотр последнего отчета о проверке диска (chkdsk)

Нажмите комбинацию клавиш Win + R и введите PowerShell

Скопируйте и вставьте код:

Для Windows 7
PHP:
get-winevent -FilterHashTable @{logname="Application"; id="1001"; starttime="01/01/2011"}| ?{$_.providername –match "wininit"} | fl timecreated, message > "$env:homepath\desktop\chkdsk_history.txt"
и нажмите ENTER.

Для Windows 8
PHP:
Get-EventLog -LogName Application -Source chkdsk | select -Last 5 -ExpandProperty Message > "$env:homepath\desktop\chkdsk_history.txt"

Лог будет сохранен в файл chkdsk_history.txt на рабочем столе.

Спасибо Koza Nozdri и dzu38

Дело в том, что ChkDsk можно запустить для несистемного диска,
тогда для выполнения проверки система не будет перезагружена
и код события / источник сообщения будут другими.

Это пример в Windows 7.
1.webp
Вот так должно работать на любой системе с настройками по-умолчанию (не проверял):

Код Batch:
Код:
::
wmic path win32_NTLogEvent WHERE "Logfile='Application' AND (SourceName='Chkdsk' OR SourceName='wininit') AND (EventIdentifier=1001 OR EventIdentifier=26214)" get /value > chk.log
::

Вероятно, будут лишние записи в логе.
Нужно иметь перед собой такие логи, чтобы убрать фальсы.Чтобы не быть привязанным к инструментарию WMI (вдруг он поврежден - 1 случай из 100),
можно воспользоваться SQL-подобным запросом через утилиту LogParser. Делает тоже самое - выборка из лога журнала событий.Но и не забывать про вероятность отключенной службы "Журнал событий Windows" и (как Вы говорили) "Сборщик событий Windows".
Это можно также проверять / запускать скриптом.
 
Последнее редактирование:
wmic path win32_NTLogEvent WHERE "Logfile='Application' AND (SourceName='Chkdsk' OR SourceName='wininit') AND (EventIdentifier=1001 OR EventIdentifier=26214)" get /value > chk.log
Проверил, работает, спасибо. Только, если в таком виде, лог сохраняется в папке System32, а если заменить chk.log на "$env:homepath\desktop\chkdsk_history.txt" - на рабочем столе.
Aleх, а почемк, когда я проверял скрипт,написанный для семёрки, на ХР, встроенной у меня в ВиртуалБокс, выскакивает пустой отчёт ?! Что я делаю не так ? Не мог бы ты ( или кто из твоих знакомых ) проверить работу скрипта на ХР, стоящей на компьютере одной ОС.
Благодарю за напоминание о службах, в статье забыл указать, исправлю.shestale, Не по теме :
Да дело не в этом. Просто общение странное, меня лично оскорбляет. Стоило один раз согласиться на одну статью и пошло-поехало, будто я им чем то обязан. Ну, знаете, как в пословице " Посади свинью за стол - она и ноги на стол ". Жаль. я психанул и удалил всю личную переписку с модераторами их форума, хамство и высокомерие не прикрытое.
 
Последнее редактирование модератором:
chk.log на "$env:homepath\desktop\chkdsk_history.txt" - на рабочем столе.
В CMD переменные раскрываются через проценты: "%UserProfile%\Desktop\chkdsk_history.txt"

Но это не будет работать в русскоязычной XP. Там рабочий стол называется по-русски.
Уж больно длинный скрипт получится.
Пользователю всегда лучше давать в виде файла => Запустил, получил лог,
чем рассказывать как запустить ком. строку, как скопировать и выполнить код.

Тогда и определять расположение рабочего стола будет не нужно.
Лог будет сохранен рядом с батником:

Код:
::
wmic path win32_NTLogEvent WHERE "Logfile='Application' AND (SourceName='Chkdsk' OR SourceName='wininit') AND (EventIdentifier=1001 OR EventIdentifier=26214)" get /value > "%~dp0chkdsk_history.txt"
::

Aleх, а почемк, когда я проверял скрипт,написанный для семёрки, на ХР, встроенной у меня в ВиртуалБокс, выскакивает пустой отчёт ?! Что я делаю не так ?
Напиши какой скрипт ты запускал, тогда смогу ответить.
 
ХР sp3.на семерке - нормально.
 
Последнее редактирование:
Посмотрел. Там в журнал записывает WinLogon. И имя свойства другое: EventCode нужно брать, а не EventIdentifier,
хотя MSDN говорит, что брать нужно как раз второе в качестве уникального идентификатора события.

Код:
::
wmic path win32_NTLogEvent WHERE "Logfile='Application' AND (SourceName='Chkdsk' OR SourceName='Wininit' or SourceName='WinLogon') AND (EventCode=1001 OR EventCode=26214)" get /value > "%~dp0chkdsk_history.txt"
::
 
Последнее редактирование:
Код:
::
wmic path win32_NTLogEvent WHERE "Logfile='Application' AND (SourceName='Chkdsk' OR SourceName='Wininit' or SourceName='WinLogon') AND (EventCode=1001 OR EventCode=26214)" get /value > "%~dp0chkdsk_history.txt"
::

этот.
 

Вложения

  • .bat.rar
    .bat.rar
    253 байт · Просмотры: 3
dzu, Да я не про это, это я уже понял, принял, спасибо, ребята. Интересно, почему не прошёл " семёрошный " скрипт через Пауершелл 2.0 в ХР SP3.
 
ну дык , xp не знает - этих команд( если я , все правильно понял из этого "сумбура").
 
dzu, Может я чё не понял, но это командлет для Пауершелл и какая ОС не должно играть роли, мы же не cmd задействуем.
Подождём весточки от Dragokas.
 
Я в последнем сообщении объяснил почему.

А на счет разного вида написания командлетов, так это зависит от версии Powershell.
В новых версиях одни команды заменяются на другие. Появляются новые возможности.

P.S. Как создать батник (пакетный файл .cmd .bat) ?
 
Последнее редактирование:
Назад
Сверху Снизу