[CMD] Автоматизация чтения логов sfc/scannow

oniava

Участник
Сообщения
97
Реакции
3
Здравствуйте форумчане.

Вопрос в следующем, точнее нереализованная задумка.
Имеем лог, после сканирования утилитой sfc/scannow на предмет целостности и поврежденных файлов по пути "%windir%\Logs\CBS\cbs.log".
Результат сканирования оказался таким: "Защита ресурсов Windows обнаружила повреждённые файлы, но не может восстановить некоторые из них."
Одним словом, замену файлов надо делать руками.
Вот я и подумал, автоматизировать данный процесс.
Что на мой взгляд нужно для этого.
Работаем из Windows PE.

1. Поиск строк в cbs.log после сканирования, в которых есть фраза:
Этот лог считываем и фильтруем батником:
"Cannot repair member file"
"Repairing corrupted file"
"source file in store is also corrupted"
вывод результата в отдельный файл cbs_details.txt (на рабоче столе к примеру)

Код:
findstr /c:"Cannot repair member file" %windir%\Logs\CBS\cbs.log >> %userprofile%\Desktop\cbs_details.txt
findstr /c:"Repairing corrupted file" %windir%\Logs\CBS\cbs.log >> %userprofile%\Desktop\cbs_details.txt
findstr /c:"source file in store is also corrupted" %windir%\Logs\CBS\cbs.log >> %userprofile%\Desktop\cbs_details.txt

2. Фильтруем файл cbs_details.txt:
2017-10-12 00:43:14, Info CSI 000000a3 [SR] Cannot repair member file [l:24{12}]"ideograf.uce" of Microsoft-Windows-charmap, Version = 6.1.7601.23403, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch
2017-10-12 00:43:15, Info CSI 000000a5 [SR] Cannot repair member file [l:24{12}]"ideograf.uce" of Microsoft-Windows-charmap, Version = 6.1.7601.23403, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch
2017-10-12 00:45:19, Info CSI 00000152 [SR] Cannot repair member file [l:18{9}]"idndl.dll" of Microsoft-Windows-International-Normalization, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch
2017-10-12 00:45:20, Info CSI 00000154 [SR] Cannot repair member file [l:18{9}]"idndl.dll" of Microsoft-Windows-International-Normalization, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch
2017-10-12 00:45:28, Info CSI 0000016a [SR] Cannot repair member file [l:20{10}]"icacls.exe" of Microsoft-Windows-ICacls, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch
2017-10-12 00:45:28, Info CSI 0000016c [SR] Cannot repair member file [l:20{10}]"icsigd.dll" of Microsoft-Windows-icsigd, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, hash mismatch

2017-10-12 00:50:08, Info CSI 000002f2 [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\ru-RU"\[l:28{14}]"usbhub.sys.mui" from store
2017-10-12 00:50:08, Info CSI 000002f5 [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\ru-RU"\[l:28{14}]"usbhub.sys.mui" from store
2017-10-12 00:50:08, Info CSI 000002f8 [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\en-US"\[l:28{14}]"usbhub.sys.mui" from store
2017-10-12 00:50:08, Info CSI 000002fb [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\en-US"\[l:28{14}]"usbhub.sys.mui" from store
2017-10-12 00:58:52, Info CSI 000004ec [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\ru-RU"\[l:28{14}]"usbhub.sys.mui" from store
2017-10-12 00:58:52, Info CSI 000004f5 [SR] Repairing corrupted file [ml:520{260},l:74{37}]"\??\C:\Windows\system32\drivers\en-US"\[l:28{14}]"usbhub.sys.mui" from store

2017-10-12 00:43:15, Info CSI 000000a9 [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:24{12}]"ideograf.uce"; source file in store is also corrupted
2017-10-12 00:45:20, Info CSI 00000158 [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:18{9}]"idndl.dll"; source file in store is also corrupted
2017-10-12 00:45:32, Info CSI 0000017e [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:22{11}]"ieakeng.dll"; source file in store is also corrupted
2017-10-12 00:45:32, Info CSI 00000184 [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:22{11}]"icardie.dll"; source file in store is also corrupted
2017-10-12 00:45:32, Info CSI 0000018d [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:20{10}]"ieakui.dll"; source file in store is also corrupted
2017-10-12 00:45:32, Info CSI 00000193 [SR] Could not reproject corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:20{10}]"icacls.exe"; source file in store is also corrupted
чтобы в файле cbs_details.txt остались строки:
C:\Windows\System32\IasMigPlugin.dll
C:\Windows\System32\iaspolcy.dll
C:\Windows\System32\iasrad.dll
C:\Windows\System32\iasrecst.dll
C:\Windows\System32\iassdo.dll
C:\Windows\System32\iassvcs.dll
C:\Windows\System32\icacls.exe
C:\Windows\System32\icardagt.exe
C:\Windows\System32\ieapfltr.dat
C:\Windows\system32\drivers\ru-RU\usbhub.sys.mui
4. Далее, батник беря данные из файла cbs_details.txt, делает резервную копию файлов, на всякий случай
Код:
copy "C:\Windows\System32\IasMigPlugin.dll" "C:\OldSystem32\IasMigPlugin.dll"
copy "C:\Windows\System32\iaspolcy.dll" "C:\OldSystem32\iaspolcy.dll"
copy "C:\Windows\System32\iasrad.dll" "C:\OldSystem32\iasrad.dll"
copy "C:\Windows\System32\icacls.exe" "C:\OldSystem32\icacls.exe"
copy "C:\Windows\System32\icsigd.dll" "C:\OldSystem32\icsigd.dll"
copy "C:\Windows\System32\ideograf.uce" "C:\OldSystem32\ideograf.uce"
copy "C:\Windows\System32\idndl.dll" "C:\OldSystem32\idndl.dll"
copy "C:\Windows\System32\ieapfltr.dat" "C:\OldSystem32\ieapfltr.dat"
copy "C:\Windows\system32\drivers\ru-RU\usbhub.sys.mui" "C:\OldSystem32\drivers\ru-RU\usbhub.sys.mui"
У нас уже приготовлена папка с распакованным дистрибутив нашей Windows.
5. Удаляем выбранные файлы:
Код:
DEL /F /S /Q /A "C:\Windows\System32\IasMigPlugin.dll"
DEL /F /S /Q /A "C:\Windows\System32\iaspolcy.dll"
DEL /F /S /Q /A "C:\Windows\System32\iasrad.dll"
DEL /F /S /Q /A "C:\Windows\System32\icacls.exe"
DEL /F /S /Q /A "C:\Windows\System32\icsigd.dll"
DEL /F /S /Q /A "C:\Windows\System32\ideograf.uce"
DEL /F /S /Q /A "C:\Windows\System32\idndl.dll"
DEL /F /S /Q /A "C:\Windows\System32\ieapfltr.dat"
DEL /F /S /Q /A "C:\Windows\system32\drivers\ru-RU\usbhub.sys.mui"
6. Копируем файлы из распакованного дистрибутива в нашу систему:
Код:
copy "D:\Folder\System32\IasMigPlugin.dll" "D:\Folder\System32\IasMigPlugin.dll"
copy "D:\Folder\System32\iaspolcy.dll" "D:\Folder\System32\iaspolcy.dll"
copy "D:\Folder\System32\iasrad.dll" "D:\Folder\System32\iasrad.dll"
copy "D:\Folder\System32\icacls.exe" "D:\Folder\System32\icacls.exe"
copy "D:\Folder\System32\icsigd.dll" "D:\Folder\System32\icsigd.dll"
copy "D:\Folder\System32\ideograf.uce" "D:\Folder\System32\ideograf.uce"
copy "D:\Folder\System32\idndl.dll" "D:\Folder\System32\idndl.dll"
copy "D:\Folder\System32\ieapfltr.dat" "D:\Folder\System32\ieapfltr.dat"
copy "D:\Folder\System32\drivers\ru-RU\usbhub.sys.mui" "D:\Folder\System32\drivers\ru-RU\usbhub.sys.mui"
Я весь код обобщенно написал, его можно сократить в несколько раз.
Думаю, данный скрипт многим пригодится.
Кто может помочь в данном вопросе.
 
Последнее редактирование:
Задумка уже реализована в двух скриптах, там есть и фильтрация и резервное копирование, и даже перерегистрация, разве что очистки строки до конкретных путей нет:
https://safezone.cc/resources/filtracija-loga-sfc-scannow.123/
https://safezone.cc/resources/system-file-replacer.167/

У нас уже приготовлена папка с распакованным дистрибутив нашей Windows.
Вот только в вашей задумке есть один нюас, который сведёт всё на нет. Дистрибутив то у вас дефолтовый, а файлы, требующие замены, совершенно других (новых) версий, которых нет в дистрибутиве.
 
Последнее редактирование:
Тем что этот файл не подойдёт. Версии разные. А если вы принудительно скопируете такой файл, можете получить в итоге BSOD или нестабильности в работе ОС, а повторная проверка SFC снова выявит повреждение файла по признаку несовпадения хеш-суммы.
 
Если система устанавливается на железо, где нет и не будет интернета, или по-умолчанию, отключены (навсегда) обновления Windows, тогда да, подобный скрипт вам поможет. Иначе, системные файлы обновляются новыми версиями, которых на дистрибутиве уже нет.

Кроме того, обновления могут ставиться одновременно с каким-нибудь ПО (распространяться в комплекте с ним).
 
Последнее редактирование:
oniava, нет, опасен именно такой вариант, как было предложено вами в 1-м посте, потому что файлы вручную заменяются на непонятные версии.
В варианте Кирилла роль механизма, который определяет, подходит версия или нет, берёт на себя Windows, а именно утилита sfc, которая запускается из-под Win PE в данном скрипте: https://safezone.cc/resources/prove...jlov-utilitoj-sfc-v-srede-vosstanovlenija.89/

Единственное, что я не знаю, есть ли в этом скрипте поддержка подключения внешнего источника данных, дистрибутива. Если нет, тогда это вопрос к Кириллу по поводу оптимизации его скрипта (можете задать в соответствующей теме поддержки по ссылке выше).
 
Не знаю, честно говоря. Это лучше спрашивать у Кирилла в теме его скрипта.
 
Даже если бы у меня было время, я бы не взялся за такой потенциально опасный скрипт, который может принести больше вреда чем пользы.
При выполнение 1 условия его можно сделать безопасным: сверить версии файлов, но это тоже не просто. MS иногда может не поменять в свойствах файла версию, тогда придётся сверяться как-то по хешу, а для этого нужно извлекать из SFC хеш (а его там ещё и может не быть).
А ещё и дистрибутив нужно не просто распаковать диск, а еще и сделать expand файлов, т.е. распаковать каждый файл, а пока не распакуешь опять таки не узнаешь его хеш, если заранее нигде не прописано.
Вообщем, это не всё так просто.
oniava, у меня в прошлом были определённые наброски и идеи, как автоматизировать процесс,
но всё это упиралось в разные технические сложности.
Например, была идея написать скрипт, который бы снял снимок хешей со всех сис. файлов в некую базу данных, сохранил все файлы в облако,
затем накатывал бы по одному KB (обновлению), снова делал снимок, добавляя в облако разницу. Тогда скрипт (пост 1) умел бы правильно заменить
почти любую версию файлов, забрав из облака. Но тут опять возникли несостыковки. Дело в том, что Microsoft некоторые патчи отзывает, некоторые заменяет на
сборки патчей, итого к тебе приходит юзер с больным ПК, а версий его повреждённых dll нигде в природе, в смысле, в живом виде, не существует
(официально не получается найти эту версию в KB, т.к. он может быть отозван и удалён с сайта центра обновлений).

Была и идея и даже готовая альфа-реализация, которую я нигде не показывал, - монтирование к локальному жесткому диску FTP с распакованным образом диска.
Но что-то не пошло. Я реализовал только для XP SP2, 3, ru + en (4 дистрибутива), потому что занимали меньше всего места.
Упёрлось в финансы, т.к. для других систем нужно очень много места на FTP, а это гораздо более дорогой тариф. О WebDav я тогда ещё не слышал,
да и в то время не было ещё разных акций на ЯД, Google, чтобы получить много бесплатных гигабайт, а нужен наверное целый террабайт,
чтобы поместить все редакции разных разрядностей и разных языков (хотя бы RU / EN).
 
Назад
Сверху Снизу