Что сделать чтобы проверка chkdsk делалась раз в месяц

Опубликовано: 01.04.2017

Внимание ! 
 Всё это касается лицензионной, активированной, прошедmшей проверку подлинности, уникальной ОС Windows. За  работу различного рода сборок, не лицензионной ОС ответственности не несу.

Животрепещуще для Windows Vista и старше, как 32 так 64 разрядных. Обязательно инспектируйте корректность часового пояса, даты и времени на вашем компьютере и наличие в вашей системе последней версии Microsoft .NET Framework ( Microsoft .NET Framework 4.5 )
Если встроить в Windows XP это Установочный пакет локализованной версии Windows PowerShell 1.0 для ОС Windows XP или это Windows Management Framework Core и все обновления на эти составляющие ( если будут ) через Центр обновления - будет животрепещуще и для неё.
Чуток позднее попробую написать универсальную команду, которая будет работать на хоть какой ОС Windows.
Сначала давайте определим, что же это все-таки за утилита. CHKDSK,стандартное приложение в операционных системах DOS и Windows ( ранее её именовали Scandisk, в системах UNIX называется fsck ).
Призвана отыскивать и исправлять ошибки файловой системы, а так же  проверять диски на наличие на физическом уровне повреждённых секторов. Отмечая как повреждённые, система больше не пробует читать с этих секторов либо писать на их.
В этом, на мой взор, есть значимый минус в отличии от испытанных временем утилит MHDD и Victoria ( Как выполнить проверку жесткого диска при помощи victoria ),способных не только лишь отметить повреждённые сектора ЖД, да и прочесть, вернуть и перезаписать информацию из их ( и ещё много чего ).Впрочем, Майкрософт и не обещал чуда, эта утилита носит быстрее диагностический нрав.
По дефлоту, CHKDSK не исправляет ошибки и не инспектирует поверхность диска на наличие повреждённых секторов. Для исправления ошибок нужно задать флаг /F,а для поиска повреждённых секторов задать флаг /R.
 Т. е.,говоря проще, пользовательским языком, поставить нужное вам количество галочек в ( правой кнопкой ) Раздел диска - характеристики - сервис - выполнить проверку ( как тут или тут ). 
Можно рассматривать СНKDSK как собственного рода индикатор состояния вашей ОС. Пуск CHKDSK во время загрузки операционной системы может свидетельствовать, к примеру, о неисправности оперативки либо её разъёма,ошибок томов ( разделов ) ЖД. Цикличная ( нескончаемая ) работа - в большинстве случаев результат " честной " работы посторониих очистителей - оптимизаторов, смело удаляющих нулевые файлы, пустые папки, пустые характеристики реестра и т.п.( часто являющихся неотъемлемой частью самой ОС !!! ).
CHKDSK можно запустить из командной строчки, либо из командной строчки в режиме восстановления ( когда ОС не может загрузиться ).Можно задать пуск в определённое время через планировщик задач. Это отдельные темы.
 Но речь сечас не об этом.  Лог работы СНKDSK можно поглядеть выполнив Панель управления -> Администрирование -> Просмотр событий -> Журнальчики Windows -> «Приложение». Как говорят различные умные головы на просторах интернета, источником является Wininit, другие, что источник - извещения службы Winlogon. Ну ну и пусть спорят. Нам же с вами принципиально только то, что  никакого отчёта вы там, ну и вообщем нигде не найдёте. Существует он всего секунды, потом становится невидимкой, даже, если вы сделаете видимыми все сокрытые, защищённые файлы и папки. Но он ( отчёт, файл. с заглавием bootex.txt ) не исчезает бесследно. 
 Вот здесь нам и поможет Windows PowerShell : 
Запуск -> Стандартные -> Windows PowerShell -> правой кнопкой по Windows PowerShell  ( выполнение операций с объектами командная строчка )-> Пуск от имени админа и вводим команду ( для PowerShell применяется термин " командлет " )    get-winevent -FilterHashTable @{logname="Application"; id="1001"; starttime="01/01/2011"}| ?{$_.providername –match "wininit"} | fl timecreated, message ( здесь небольшой аспект, для Windows PowerShell 1.0 поменять get-winevent на get-eventlog ! Да и команду нужно будет корректировать. Делать этого я не стану, нет смысла рыться в делах издавна прошлых дней, позднее поймёте почему ).
Где :
1. "get-winevent ( либо get-eventlog )-FilterHashTable" - эта команда получает действия при помощи хэш-таблицы фильтра
2. "@{logname="Application"; id="1001"; starttime="01/01/2011"}|" эта команда фильтрует журнальчик "Приложения" в Просмотре событий, но , в итоге,опубликуется только последний.
 а) "logname" - этот кусок показывает на то,где будет проводиться фильтрация (в нашем случае это журнальчик "Приложения" в Просмотре событий)
 б) "id" - этот кусок показывает на то, с каким кодом будут фильтроваться действия (в нашем случает с кодом 1001).
 в) "starttime" - этот кусок показывает на то,с какого числа будут фильтроваться действия (в нашем случае действия будут фильтроваться с начала 2011 года).
3. "?{$_.providername –match "wininit"} |" - эта команда отыскивает в приобретенных результатах предшествующей команды действия, в какой в имени поставщика находится "wininit"
4. "fl timecreated, message" - эта команда выводит на экран итоговый перечень, где показаны текст событий и даты, надлежащие условиям фильтра

Если прибавить эту команду  > "$env:homepath\desktop\chkdsk_history.txt" кода в конец команды fl timecreated, message ( после пробела ),то результаты команды fl timecreated, message  будут сохранены в лог с именованием chkdsk_history.txt на десктопе (для удобства).

Для юзеров OC Windows 8.1 командлет смотрится так 
Get-EventLog -LogName Application -Source chkdsk | select -Last 5 -ExpandProperty Message > "$env:homepath\desktop\chkdsk_history.txt"

Итак, проверяем на моём ПК ( ОС Windows 7 домашняя базисная Х 86 ):

1. Меню "Запуск" - все программки - стандартные - Windows PowerShell - Windows PowerShell командная строчка ( см. скрин 1 );
2.Вводим команду get-winevent -FilterHashTable @{logname="Application"; id="1001"; starttime="01/01/2011"}| ?{$_.providername –match "wininit"} | fl timecreated, message > "$env:homepath\desktop\chkdsk_history.txt" и...
благополучно получаем отчёт в виде текстового файла на десктопе ( см. скрин 2 )
В мой заглядывать не стоит, пуст, поэтому, как CHKDSK я уж издавна не запускал, а отчёты Просмотра событий я временами просматриваю и удаляю. 

Всё вышеперечисленное мы делали для системного раздела С жёсткого диск

Дополним статью.

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

Это пример в Windows 7.

Чтоб не быть привязанным к инструментарию WMI (вдруг он поврежден - 1 случай из 100),
можно пользоваться SQL-подобным запросом через утилиту LogParser. Делает тоже самое - подборка из лога журнальчика событий.

Для Windows XP всё оказалось гораздо сложнее. Во первых, в ней переменные раскрываются через проценты: "%UserProfile%\Desktop\chkdsk_history.txt"

Во вторых, это не будет работать в русской XP. Там десктоп именуется по-русски.

И в третьих, в ХР можно встроить только одну из 2-ух издавна устаревших версий PowerShell, там командлеты прописывались чуть по другому, рыться как - занятие пустое и не благодарное. Уж больно длиннющий скрипт получится.

А по сему, дамы и господа, предлагаю универсальный скрипт для всех версий PowerShell и для всех версий ОС Windows ХР ( не считая серверных, не было способности проверить ): 

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 ) на десктоп и запустите его от имени админ.И ещё, чтоб повсевременно иметь отчёты о состоянии системы в полном объёме, нужно, чтоб здесь стояла галочка, а службы " Журнальчик событий Windows " и " Собиратель событий Windows " работали, причём в автоматическом режиме.

P.S.Выражаю гигантскую благодарность спецам форума SafeZone за помощь в написании статьи.
Данный вариант статьи не окончателен. В предстоящем будет дополняться. Подлежит дискуссии.

rss