Archiv verlassen und diese Seite im Standarddesign anzeigen : script für chkdsk Ergebnis?
hallo,
gibt es ein script für die Anzeige vom letzten chkdsk Ergebnis (z.B. über Notepad etc.)?
(Windows 7 64 prof)
Hallo,
noch nie was davon gehört. Du kannst aber eine Batch schreiben, darin CHDKDSK aufrufen und die Ausgabe in eine Datei (z.b. ergebnis.txt) umleiten. Dann kannst Du jederzeit auf das letzte Ergebnis zugreifen.
MfG
Hallo,
noch nie was davon gehört. Du kannst aber eine Batch schreiben, darin CHDKDSK aufrufen und die Ausgabe in eine Datei (z.b. ergebnis.txt) umleiten. Dann kannst Du jederzeit auf das letzte Ergebnis zugreifen.
MfG
das geht leider nicht (soweit ich weiß), wenn ich ein gesperrtes Laufwerk wie c: überprüfen will, was dann erst beim (d.h. kurz vor dem) erneuten Windows-Neustart ausgeführt wird: darum geht es mir vor allem...
chkdsk c: /F /R /B
oder wie machst du das genau?
Ich habe sowas nie gebraucht. Und wenn, früher, hab ich es so gemacht, wie ich geschrieben hab.
In Windows wird das Prüfergebnis aber in einem "CHKDSK-Log" bzw. "CHKDSK-Protokoll" gespeichert. Das kann man nachträglich einsehen. Mal im Netz suchen. Suchbegriffe: "CHKDSK-Log" "CHKDSK-Protokoll" einsehen
Ich kann Dir aber nicht sagen, in welchen Dateien das dann steht. Aber aus Zeiten mit Visual Basic Weiß ich, dass man leicht auf viele windowsinterne Sachen zugreifen kann, mindestens auf die Systemregistrierungseinträge. Da Du ja den C++-Builder im Gange hast, könnte man sicher darüber auch was machen, da man die Ergebnisse auch über die windowsinternen Tools ansehen kann, wie Du bei den Suchergebnissen s.o. sehen wirst.
MfG
Ich habe sowas nie gebraucht. Und wenn, früher, hab ich es so gemacht, wie ich geschrieben hab.
In Windows wird das Prüfergebnis aber in einem "CHKDSK-Log" bzw. "CHKDSK-Protokoll" gespeichert. Das kann man nachträglich einsehen. Mal im Netz suchen. Suchbegriffe: "CHKDSK-Log" "CHKDSK-Protokoll" einsehen
Ich kann Dir aber nicht sagen, in welchen Dateien das dann steht. Aber aus Zeiten mit Visual Basic Weiß ich, dass man leicht auf viele windowsinterne Sachen zugreifen kann, mindestens auf die Systemregistrierungseinträge. Da Du ja den C++-Builder im Gange hast, könnte man sicher darüber auch was machen, da man die Ergebnisse auch über die windowsinternen Tools ansehen kann, wie Du bei den Suchergebnissen s.o. sehen wirst.
MfG
meine Frage war nicht, ob du so was noch nie gebraucht hast und/oder ob du es NICHT weißt, sondern:
gibt es ein script für die Anzeige vom letzten chkdsk Ergebnis (z.B. über Notepad etc.)?
(Windows 7 64 prof)
es steht irgendwo in der Ereignisanzeige, aber irrsinnig schwer auffindbar, daher meine Frage nach einem Script, das das sofort auf den Schirm bringt
ich habe da einen Stackoverflow Eintrag gefunden der als Ergebnis eine bat hat die deinen Zwecken dienen sollte :)
in der anderen Antwort steckt ein relativ kurzer Powershell Script, der bei mir zumindest 1 mal funktioniert hat
https://stackoverflow.com/questions/38504689/how-can-i-get-the-results-of-a-chkdsk-that-run-on-boot
soweit ich den Inhalt verstanden habe macht er auch nichts böses :)
die Variante mit der Powershell aus der alternativen Antwort finde ich besser, weil minimalistischer
ich habe da einen Stackoverflow Eintrag gefunden der als Ergebnis eine bat hat die deinen Zwecken dienen sollte :)
in der anderen Antwort steckt ein relativ kurzer Powershell Script, der bei mir zumindest 1 mal funktioniert hat
https://stackoverflow.com/questions/38504689/how-can-i-get-the-results-of-a-chkdsk-that-run-on-boot
soweit ich den Inhalt verstanden habe macht er auch nichts böses :)
die Variante mit der Powershell aus der alternativen Antwort finde ich besser, weil minimalistischer
was meinst du mit powershell script?
das hier?
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file Desktop\CHKDSKResults.txt
das gibt einen Fehler
Der Befehl "get-winevent" konnte nicht gefunden werden.
Das Batchfile
@echo off
Title Check Disk drives for errors and fix them by Hackoo 2016
mode con cols=67 lines=5 & Color 0A
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
set "TmpLog=%Tmp%\TmpLog.txt"
set "Log=%~dp0%computername%_%~n0.txt"
set "MyVBSFile=%~dp0%~n0_On_Boot.vbs"
set "Value=CHKDSK_ON_BOOT"
Set "Key=HKCU\Software\Microsoft\Windows\CurrentVersion \RunOnce"
If Exist "%TmpLog%" Del "%TmpLog%"
If exist "%Log%" Del "%Log%"
REM --> Check for permissions
Reg query "HKU\S-1-5-19\Environment" >nul 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO **************************************
ECHO Running Admin shell... Please wait...
ECHO **************************************
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
::::::::::::::::::::::::::::
:: START ::
::::::::::::::::::::::::::::
( Echo Scan started @ & Date /T & Time /T & echo ************************ ) > "%TmpLog%"
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%i in ('wmic logicaldisk where "drivetype=3" ^|find /i ":"') do (
set "fix=%%i"
Call :Affich !fix!
(
echo !fix! Drive
echo ************************
echo(
(echo O
echo Y) | CHKDSK !fix! /f
echo(
echo ************************
)>> "%TmpLog%"
)
EndLocal
Goto Question
Exit /b
::************************************************ ******************
:Question
( echo Scan finished @ & Date /T & Time /T & echo ************************ )>> "%TmpLog%"
CMD /U /C Type "%TmpLog%" > "%Log%"
If Exist "%TmpLog%" Del "%TmpLog%"
(
echo Answ = MsgBox("Did you want to reboot the computer to complete the scanning ?",VbYesNo+VbQuestion,"Reboot the computer to check hard disk drives for errors by Hackoo"^)
echo If Answ = VbYes then
echo wscript.Quit(0^)
echo Else
echo wscript.Quit(1^)
echo End If
)>"%tmp%\%~n0.vbs"
Cscript /nologo "%tmp%\%~n0.vbs"
IF "%errorlevel%" EQU "1" ( goto AddKey ) else ( goto Shutdown )
::************************************************ ******************
:Shutdown
echo(
cls
echo(
echo Save your work - Reboot of your computer in 120 seconds
echo(
echo Enregistrer vos documents - Redemarrage du PC dans 120 seconds
Call:AddKey && Shutdown.exe /r /t 120 /c "Enregistrer vos documents - Redemarrage du PC dans 120 secondes"
pause>nul
exit /b
::************************************************ ******************
:Affich
Cls
echo(
echo ***********************************
Echo Please wait a while Scanning "%~1"
echo ***********************************
Timeout /T 2 /nobreak>nul
exit /b
::************************************************ ******************
:AddKey
reg query "%key%" /v "%Value%" >nul 2>&1
If "%errorlevel%" EQU "0" ( Goto :EOF
) Else (
reg add "%Key%" /v "%Value%" /t REG_SZ /d "%MyVBSFile%">nul
(
echo Option Explicit
echo 'Run as Admin
echo If Not WScript.Arguments.Named.Exists("elevate"^) Then
echo CreateObject("Shell.Application"^).ShellExecute DblQuote(WScript.FullName^) _
echo , DblQuote(WScript.ScriptFullName^) ^& " /elevate", "", "runas", 1
echo WScript.Quit
echo End If
echo Dim ws,PSCommand,LogFile,ret
echo LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.Scrip tFullName, "."^)^) ^& "txt"
echo set ws = createobject("wscript.shell"^)
echo PSCommand = "cmd /c Powershell -Command ""& ""Get-winevent -FilterHashTable @{logname='Application'; id='1001'}^|?{$_.providername -match 'wininit'} ^| fl timecreated, message ^| out-file "^& SimpleQuote(LogFile^) ^&""
echo ret = ws.run(PScommand,0,True^)
echo ws.run DblQuote(LogFile^)
echo '**************************************
echo Function DblQuote(Str^)
echo DblQuote = chr(34^) ^& Str ^& chr(34^)
echo End function
echo '**************************************
echo Function SimpleQuote(Str^)
echo SimpleQuote = ChrW(39^) ^& Str ^& ChrW(39^)
echo End Function
echo '**************************************
)>"%MyVBSFile%"
start "" "%Log%"
)
Exit /b
::************************************************ *******************
hingegen ist auch nicht bauchbar, weil es nicht die chkdsk-Ergebnisse listet, die bereits gelaufen sind (z.B. auch bei von Windows selber erzeugten chkdsk Läufen auf Grund von Bootfehlern)
hast du den powershell script denn auch in der "powershell" ausgeführt? Die klassische cmd ist nur die "Konsole"
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file Desktop\CHKDSKResults.txt
da du die pro variante hast, sollte es sich über das startmenü tehoretisch leicht finden lassen
edit: habs gefunden, gibt aber auch Fehler:
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
PS C:\Windows\System32\WindowsPowerShell\v1.0> get-winevent -FilterHashTable @{l
ogname="Application"; id="1001"}| ?{$_.providername -match "wininit"} | fl timec
reated, message | out-file Desktop\CHKDSKResults.txt
Out-File : Ein Teil des Pfades "C:\Windows\System32\WindowsPowerShell\v1.0\Desk
top\CHKDSKResults.txt" konnte nicht gefunden werden.
Bei Zeile:1 Zeichen:140
+ get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.provi
dername -match "wininit"} | fl timecreated, message | out-file <<<< Desktop\CH
KDSKResults.txt
+ CategoryInfo : OpenError: (:) [Out-File], DirectoryNotFoundExce
ption
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.Ou
tFileCommand
PS C:\Windows\System32\WindowsPowerShell\v1.0>
irgendwie ist das verkorkst wie es scheint...
De sk
top
Du hast da glaube ich ein Leerzeichen reingehauen, passe mal das Ende der Zeile an, dass er die Datei auf einem absoluten und nciht relativen Pfad legt, also statt
out-file Desktop\CHKDSKResults.txt
out-file <AbsoluterPfadZuEinemOrdner>\CHKDSKResults.txt
bedenke dass Leerzeichen im Pfad problematisch sein können und du den Dateinamen eventuell inklusive Pfad in Anführungszeichen setzen musst
OT: "bedenke dass" oder "bedenke das" ??? hab grad irgendwie eine Data Corruption im Hirn .. da ist etwas von meiner Schulbildung verloren gegangen
ich hatte den Befehl nur per c+p eingefügt
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file Desktop\CHKDSKResults.txt
edit:
Out-File : Es wurde kein Parameter gefunden, der dem Parameternamen "FilterHashTable" entspricht.
Bei Zeile:1 Zeichen:195
+ get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername -match "wininit"} | fl timecreat
ed, message | out-file Desktop\CHKDSKResults.txtget-winevent -FilterHashTable <<<< @{logname="Application"; id="1001"}
| ?{$_.providername -match "wininit"} | fl timecreated, message | out-file Desktop\CHKDSKResults.txt
+ CategoryInfo : InvalidArgument: (:) [Out-File], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comman ds.OutFileCommand
Da ist total der Wurm drin.
Oder wie lautet der Befehl korrekt?
PS, manchmal tut Powershell auch überhaupt nichts und erzeugt noch nicht mal eine Fehlermeldung, und ich habe noch nicht mal eine Möglichkeit zum Editieren, Einfügen oder Kopieren in dem (mi******) Terminal ... :-
ärgerlich, vielleicht ein windows 7 vs 8 ding :(
sorry, habe leider keinen 7er in reichweite zum bateln und testen, sorry
@Ceos: ok, danke für die Idee!
PS
@Moppi:
wenn du eine Befehlszeile kennst, die das chkdsk Ergebnis auch für c: /F (...) nach einem dann notwendigen Reboot in eine eigene separate Datei schreibt, dann nenne sie bitte!
Ich habe es mal unter Windows 7 ausprobiert. Da ich einen Pfadfehler hatte, habe ich die Zeile etwas abgeändert, die CHKDSKResults.txt befindet sich bei mir dann in: C:\Windows\System32
In der Datei steht auch was drin. Es sind mehrere (also wohl alle) Ergebnisse der letzten CHKDSK-Durchläufe enthalten.
Ich habe Power Shell als Administrator aufgerufen, damit es funktioniert. Ich habe diese Zeile dort hinein kopiert und ausgeführt:
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file CHKDSKResults.txt
*Kopf->Tisch* ... Admin Modus ... ist bei mir schon impliziter Standard wenn ich die Shell benutze
Sorry daran habe ich nicht gedacht bei meiner Erklärung XD
aber auch verständlich irgendwo, ich hab die Zeile bei mienem Versuch direkt so angepasst dass er mir die Datei auf meinen Desktop packt(da wäre der Admin Modus auch egal), wenn man es aber einfach so ohne Pfad macht läuft die Shell in System32 und da braucht man Admin Rechte um Dateien zu schreiben
aahhh....als Administrator...! 8)
Danke für den Tipp!! 8)
habe jetzt c:\ als Ausgabepfad, zur Sicherheit,
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file c:\CHKDSKResults.txt
und siehe da: hier ist die gesuchte Info:
" CHKDSK hat freien Speicher gefunden, der in der MFT-Bitmap (Master
File Table) als zugeordnet gekennzeichnet ist.
CHKDSK hat freien Speicher gefunden, der in der Volumebitmap als
zugeordnet gekennzeichnet ist.
Windows hat Probleme im Dateisystem behoben."
Kann man jetzt irgendwie ein .BAT File schreiben, das Powershell im Admin-Modus aufruft und diese Befehlszeile als Parameter automatisch ausführt?
habe jetzt c:\ als Ausgabepfad, zur Sicherheit,
Ab Win8+ hilft das auch nicht, da ist quasi ganz c: gesichert (entsprechende User Unterordner haben natürlich Sonderregeln), nur so als Hinweis für die Zukunft
Kann man jetzt irgendwie ein .BAT File schreiben, das Powershell im Admin-Modus aufruft und diese Befehlszeile als Parameter automatisch ausführt?
Man könte sich jetzt bemühen und das bat was ich gelinkt habe versuchen zu zerlegen, aber batch ist mir zu gruselig
ok, dann nehme ich d:\ zukünftig als Ausgabepfad...
aber wie packt man jetzt alles in 1 .BAT file (oder .cmd o.ä. ) ?
Es kann ja alles vlt in 1 einzige commando-Zeile
(edit, hatte sich überschnitten mit Ceos)
Man kann diese Zeile in ein PS1-File speichern. Dazu habe ich das im Netz gefunden: https://www.script-example.com/wie-erstelle-ich-ein-PowerShell-Skript
in Windows 7 kenne ich 2 Möglichkeiten: Autostart und Aufgabenplanung, um es beim Start dann auszuführen.
Vermutlich dann mit: powershell.exe Dateiname
Eventuell ist aber auch noch ein Schalter notwendig, wenn man Admin-Rechte dafür benötigt, musst Du dann mal schauen.
MfG
Man kann diese Zeile in ein PS1-File speichern. Dazu habe ich das im Netz gefunden: https://www.script-example.com/wie-erstelle-ich-ein-PowerShell-Skript
in Windows 7 kenne ich 2 Möglichkeiten: Autostart und Aufgabenplanung, um es beim Start dann auszuführen.
Vermutlich dann mit: powershell.exe Dateiname
Eventuell ist aber auch noch ein Schalter notwendig, wenn man Admin-Rechte dafür benötigt, musst Du dann mal schauen.
MfG
ich will es nicht schedulen, sondern nur sporadisch mal bei Bedarf anschauen, wenn es nötig ist, dazu möchte ich eine Datei oder Verknüpfung auf dem Desktop ablegen und per Doppelklick starten.
So ganz klar ist mir das mit den Powershellskripten aber noch nicht... :confused:
wenn ich die obige Zeile in eine Textdatei mit dem Namen
chkdskscript.ps1
speichere und dann auf "Ausführen mit Powersript" klicke, passiert nur eine kurze eingeblendete Fehlermeldung (zu kurz um es lesen zu können).
Wie geht es richtig?
Das Problem hatte ich auch. Ist es auf der Seite nicht beschrieben?
So kann man unter Windows zunächst die power-shell-Dateien nicht ausführen lassen, weil das unter Windows blockiert ist.
Hier noch ein Link wo es erklärt ist, wie es funktionieren soll: https://praxistipps.chip.de/windows-powershell-script-ausfuehren-so-gehts_41143
in PowerShelll Rechte ändern mit: Set-ExecutionPolicy ‹policy›
Bspw. set-executionpolicy unrestricted
Dann aufrufen mit bspw.: powershell.exe c:\windows\system32\chkdsk.ps1
Du kannst auf dem Desktop eine Textdatei anlegen, schreibst die Zeile dort rein und benennst die Extension der Datei, nach dem Speichern, in "cmd" um.
Danach kannst Du diese Datei auf dem Desktop doppelklicken und sie wird ausgeführt. Bei mir erscheint dann die CHKDSKResults.txt auf dem Desktop, weil die bei mir in der PS1-Datei ohne Pfad drin steht. Dann wird die Datei dort erstellt, wo auch meine CMD-Datei liegt.
ist mir iwie zu verworren...
wo soll ich das reinschreiben?
an den Anfang einer .BAT Datei?
So?
[chkdskscript.ps1]
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file d:\CHKDSKResults.txt
[powershell_exe.bat]
Set-ExecutionPolicy unrestricted
powershell.exe chkdskscript.ps1
(beide, also .BAT und .ps1, liegen auf d:\ )
das klappt nicht, da kommt nichts sichtbares außer einer wieder nicht lesbaren Fehlermeldung
auch wenn ich erst Powershell aufrufe, dann eingebe
Set-ExecutionPolicy unrestricted
dann Powershell beende und dann die .BAT Datei aufrufufe (ohne die 1. Zeile): wieder nur kurze unlesbare Fehlermeldung.
Wie muss die .BAT Datei richtig aussehen (getestet), damit sie direkt ausführbar ist, ohne dass ich vorher erst Powershell gesondert aufrufen muss?
1. Power Shell rechte ändern, PowerShell aufrufen, Eingabe Rechte ändern vornehmen. Beispiel:
Windows PowerShellCopyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
PS C:\Windows\system32> set-executionpolicy unrestricted
Ausführungsrichtlinie ändern
Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführun
ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" beschriebenen Sicherheitsrisi
ausgesetzt. Möchten Sie die Ausführungsrichtlinie ändern?
[J] Ja [N] Nein [H] Anhalten [?] Hilfe (Standard ist "J"): j
PS C:\Windows\system32>
2. Auf dem Desktop eine Datei anlegen: chkdsk.txt
Diese Datei öffnen, mit einem Texteditor.
3. In den Texteditor eingeben: powershell.exe c:\windows\system32\chkdsk.ps1
Dabei Deinen eigenen Pfad für chkdsk.ps1 verwenden, wo immer Deine PS1-Datei steht.
4. Textdatei speichern.
5. Auf dem Desktop die Datei chkdsk.txt in chkdsk.cmd umbenennen.
6. chkdsk.cmd auf dem Desktop doppelt anklicken.
- - - Aktualisiert - - -
Inhalt der PS1-Datei bei mir:
get-winevent -FilterHashTable @{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file CHKDSKResults.txt
update:
das hatte ich so gemacht, hat aber nicht geklappt.
Der Fehler war:
PS braucht den Dateipfad d:\ , auch wenn es im aktuellen Verzeichnis liegt wie die .BAT Datei, also
[powershell_exe.bat]
powershell.exe d:\chkdskscript.ps1
so geht es jetzt, tausend Dank!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.