
areiland
Erfahrener Benutzer
Threadstarter
- Dabei seit
- 25.08.2014
- Beiträge
- 29.670
- Ort
- Ludwigshafen
- Version
- Windows 10 Pro x64 immer aktuell!
- System
- 970M Pro3, FX8350, RX560, 16GB DDR3 1600, 860Evo256 GB, MK7559GSXP, SH224BB, BenQ GW2780
Beim einen oder anderen User kann es immer mal wieder zu kleineren Probleme kommen, die die Installation von Apps verhindern oder zu undefinierbaren Fehlermeldungen führen. Um das zu beheben ist dann meist eine etwas aufwändigere Überprüfung der Systemdateien und des Komponentenstore erforderlich. Es ist dann sinnvoll die dabei geloggten Meldungen zu prüfen um herauszufinden was da nicht repariert werden kann. Dazu hatte ich vor einiger Zeit mal einen Batch geschrieben, der diese Reparaturen komplett durchführt und die Statusmeldungen der einzelnen Schritte in der Textdatei Storereparatur.txt auf dem Desktop speichert.
Von diesem Batch wird zuerst Sfc /scannow ausgeführt und die dabei in der Cbs.log gespeicherten Meldungen des aktuellen Laufs extrahiert. Meldungen von Sfc, die vor dem aktuellen Datum durchgeführt wurden, werden bei der Ausgabe nicht berücksichtigt. Diese Meldungen werden am Anfang der Storereparatur.txt eingefügt. Anschliessend wird per Dism der Komponentenstore gescannt und ein Reparaturlauf durchgeführt. Die Ausgaben dieses Laufs werden ebenfalls an die Storereparatur.txt ausgegeben. Die Datei Storereparatur.txt kann nach Abschluss der Reperaturen jederzeit mit dem Editor geöffnet werden, um die Meldungen einzusehen. Die Bildschirmausgaben des Batchlaufs wurden von mir unterdrückt - sämtliche Ausgaben der durchgeführten Aufgaben, bis auf die Bildschirmmeldungen von Sfc, landen direkt in der Storereparatur.txt. Werden in der Storereparatur.txt zwischen der einleitenden und der schliessenden Zeile keine Meldungen eingefügt, dann wurden keine solchen Meldungen geloggt und konnten deshalb auch nicht aus der Cbs.log extrahiert werden.
Den Dateianhang herunterladen und entpacken. Die enthaltene Datei Storereparatur.cmd muss mit Adminrechten ausgeführt werden (rechts anklicken und "Als Administrator ausführen" wählen) sonst kann Sfc nur wenige Reparaturen durchführen, weil dann benötigte Berechtigungen zum Zugriff auf Dateien und Ordner fehlen.
Hinweis: Auch wenn im Cmd-Fenster scheinbar nichts passiert, der Batch läuft durch und tut was er soll. Der Rechner ist auch voll benutzbar. Das Ende seines Laufes sieht man allein am Verschwinden des Fensters, bzw. am Verschwinden der Taskleistenschaltfläche.
Anhang anzeigen Storereparatur.zip
Für die Interessierten hab ich hier auch den Inhalt der Datei im Klartext eingefügt, damit ihr nachvollziehen könne was ich einzelnen machen lasse. Die mit :: eingeleiteten Zeilen sind Kommentare, mit denen ich erkläre was genau ausgeführt wird. Diese tauchen am Bildschirm und in der Ausgabedatei nicht auf.
Zu beachten ist dabei, dass Windows das Datum im Format TT.MM.JJJJ ausgibt, während das Datum in die Cbs.log aber im Iso-Format JJJJ-MM-TT geschrieben wird. Dadurch musste ich erst das Systemdatum zerlegen, um es anschliessend wieder im Iso-Format zusammen zu setzen. Wie in allen meinen Batchdateien wurden alle Schritte ausreichend kommentiert, so dass es auch für nicht Geübte möglich sein sollte genau nachzuvollziehen was ich im einzelnen gemacht habe.
Von diesem Batch wird zuerst Sfc /scannow ausgeführt und die dabei in der Cbs.log gespeicherten Meldungen des aktuellen Laufs extrahiert. Meldungen von Sfc, die vor dem aktuellen Datum durchgeführt wurden, werden bei der Ausgabe nicht berücksichtigt. Diese Meldungen werden am Anfang der Storereparatur.txt eingefügt. Anschliessend wird per Dism der Komponentenstore gescannt und ein Reparaturlauf durchgeführt. Die Ausgaben dieses Laufs werden ebenfalls an die Storereparatur.txt ausgegeben. Die Datei Storereparatur.txt kann nach Abschluss der Reperaturen jederzeit mit dem Editor geöffnet werden, um die Meldungen einzusehen. Die Bildschirmausgaben des Batchlaufs wurden von mir unterdrückt - sämtliche Ausgaben der durchgeführten Aufgaben, bis auf die Bildschirmmeldungen von Sfc, landen direkt in der Storereparatur.txt. Werden in der Storereparatur.txt zwischen der einleitenden und der schliessenden Zeile keine Meldungen eingefügt, dann wurden keine solchen Meldungen geloggt und konnten deshalb auch nicht aus der Cbs.log extrahiert werden.
Den Dateianhang herunterladen und entpacken. Die enthaltene Datei Storereparatur.cmd muss mit Adminrechten ausgeführt werden (rechts anklicken und "Als Administrator ausführen" wählen) sonst kann Sfc nur wenige Reparaturen durchführen, weil dann benötigte Berechtigungen zum Zugriff auf Dateien und Ordner fehlen.
Hinweis: Auch wenn im Cmd-Fenster scheinbar nichts passiert, der Batch läuft durch und tut was er soll. Der Rechner ist auch voll benutzbar. Das Ende seines Laufes sieht man allein am Verschwinden des Fensters, bzw. am Verschwinden der Taskleistenschaltfläche.
Anhang anzeigen Storereparatur.zip
Für die Interessierten hab ich hier auch den Inhalt der Datei im Klartext eingefügt, damit ihr nachvollziehen könne was ich einzelnen machen lasse. Die mit :: eingeleiteten Zeilen sind Kommentare, mit denen ich erkläre was genau ausgeführt wird. Diese tauchen am Bildschirm und in der Ausgabedatei nicht auf.
Code:
@Echo off
:: Aktuelles Datum in Tag, Monat und Jahr zerlegen und in den Variablen %jj%, %mm% und %tt% speichern!
set jj=%date:~6,10%
set mm=%date:~3,2%
set tt=%date:~0,2%
:: Tag, Monat und Jahr zum Tagesdatum im Iso Format zusammensetzen und in der Variablen %isodate% speichern!
set isodate=%jj%-%mm%-%tt%
:: Aktuelle Uhrzeit in Stunde und Minute zerlegen und in den Variablen %st% und %min% speichern!
set st=%time:~0,2%
set min=%time:~3,2%
@Echo Storereparatur.cmd
@Echo Wir haben den: %date%, es ist: %st% Uhr %min%
@Echo Batchdatei die einen Systemdateicheck, sowie eine Pruefung und Reparatur des
@Echo Komponentenstore, ausfuehrt. Die dabei in der Datei C:\Windows\Logs\Cbs\Cbs.log
@Echo festgehaltenen Meldungen werden extrahiert und in der
@Echo Datei %userprofile%\Desktop\Storereparatur.txt festgehalten.
@Echo Autor: Alex Reiland, SMod von www.win-10-forum.de
Pause
:: Variablendeklaration %rep% für die temporaere Arbeitdatei %temp%\rep.tmp, die die Eintraege aufnimmt - die beim aktuellen Sfc-Lauf angelegt wurden!
set rep=%temp%\rep.tmp
:: Variablendeklaration %log% fuer die Ausgabedatei Storereparatur.txt auf dem Desktop, in der die heute erstellten Meldungen von Sfc gespeichert werden!
set log="%userprofile%\Desktop\Storereparatur.txt"
:: Ausfuehren von Sfc /scannow
Sfc /scannow
:: Extrahieren der heute in der Cbs.log eingetragenen Meldungen!
findstr /c:"%isodate%" %windir%\Logs\Cbs\Cbs.log >%rep%
:: Anlegen der Storereparatur.txt und das Einfuegen von Statusmeldungen zum Beginn des Speicherns der SFc Meldungen!
@Echo Wir haben den: %date%, es ist: %st% Uhr %min% >%log%
echo. >>%log%
@Echo Die Datei Storereparatur.txt wurde automatisch von Storereparatur.cmd angelegt und enthaelt die von den Reparaturen veranlassten Statusmeldungen.>>%log%
echo. >>%log%
@echo: *** Beginn: %st% Uhr %min% - Die Details des Sfc Laufs in der Storereparatur.txt speichern *** >>%log%
:: Einfuegen einer Leerzeile, um die Storereparatur.txt übersichtlich zu gestalten
echo. >>%log%
:: Durchsuchen der temporaeren Arbeitsdatei nach Statusmeldungen von Sfc und Speichern der gefundenen Meldungen in der Storereparatur.txt!
findstr /c:"[SR]" %rep% >>%log%
:: Einfuegen einer weiteren Leerzeile!
echo. >>%log%
:: Erstellen der Statusmeldung zum Ende des Suchlaufs und des Speicherns von Sfc Statusmeldungen in der Storereparatur.txt!
@echo: *** Ende: %st% Uhr %min% - Die Details des Sfc Laufs in der Storereparatur.txt speichern *** >>%log%
:: Loeschen der temporaeren Arbeitsdatei!
del %rep%
:: Einfuegen von drei Zeilen um die Bloecke voneinander zu trennen.
echo. >>%log%
echo. ----------------------------------------------------------------------------------- >>%log%
echo. >>%log%
:: Einfuegen einer Statusmeldung zum Start der Dism Scans und Reparaturen!
@echo: *** Beginn: %st% Uhr %min% - Dism Scans und Reparaturen ausfuehren und die Meldungen in der Storereparatur.txt speichern *** >>%log%
:: Einfuegen einer Leerzeile!
echo. >>%log%
:: Start der Dism Scans und Reparaturen, Ausgabe ihrer Statusmeldungen in der Storereparatur.txt
Dism /Online /Cleanup-Image /ScanHealth >>%log%
Dism /Online /Cleanup-Image /CheckHealth >>%log%
Dism /online /cleanup-image /restorehealth >>%log%
:: Einfuegen einer Leerzeile
echo. >>%log%
:: Statusmeldung über das Ende des Dism Laufs einfuegen!
@echo: *** Ende: %st% Uhr %min% - Dism Scans und Reparaturen wurden ausgefuehrt und die Meldungen in der Storereparatur.txt gespeichert *** >>%log%
:: Einfuegen von drei Zeilen um die Bloecke voneinander zu trennen.
echo. >>%log%
echo. ----------------------------------------------------------------------------------- >>%log%
echo. >>%log%
:: Einfuegen einer Statusmeldung zum Start von Wsreset!
@echo: *** Beginn: %st% Uhr %min% - Wsreset wird ausgeführt um den Storecache zu bereinigen *** >>%log%
:: Einfuegen einer Leerzeile!
echo. >>%log%
:: Start von Wsreset um den Storecache zu loeschen und dies in der in der Storereparatur.txt zu vermerken
Wsreset.exe >>%log%
:: Einfuegen einer Leerzeile
echo. >>%log%
:: Statusmeldung über das Ende des Wsreset Laufs einfuegen!
@echo: *** Ende: %st% Uhr %min% - Wsreset wurde ausgefuehrt *** >>%log%
Zu beachten ist dabei, dass Windows das Datum im Format TT.MM.JJJJ ausgibt, während das Datum in die Cbs.log aber im Iso-Format JJJJ-MM-TT geschrieben wird. Dadurch musste ich erst das Systemdatum zerlegen, um es anschliessend wieder im Iso-Format zusammen zu setzen. Wie in allen meinen Batchdateien wurden alle Schritte ausreichend kommentiert, so dass es auch für nicht Geübte möglich sein sollte genau nachzuvollziehen was ich im einzelnen gemacht habe.
Zuletzt bearbeitet: