Benutzer mit den meisten Antworten
Diskpart mit skript schlägt fehl, trotzdem Errorlevel 0?

Frage
-
Hallo,
ich verwende under Windows PE ein diskpart skript in einem batch um bei einer automatischen Installation die Partionierung vorzunehmen. Das funktioniert auch ganz gut. Wenn aber die Festplatte zu klein ist um die Partitionen mit der im Skript festgelegten Größe anzulegen, schlägt das natürlich fehl. Leider ist der Errorlevel den diskpart in dem Fall zurück gibt aber trotzdem 0. Dadurch kann ich diesen Fall im batch nicht abfangen.
Diskpart selbst merkt natürlich, dass diese Partition nicht angelegt werden kann und macht entsprechende Ausgaben, die in meinem Fall in einem logfile landen. Schade nur, dass der Errorlevel nicht mitteilt, wenn das skript fehlschlägt.
Gibt es eine Lösung dafür, außer nach diskpart im batch zu prüfen, ob die Laufwerksbuchstaben tatsächlich angelegt wurden?
Viele Grüße
Mirko
- Verschoben Alex Pitulice Donnerstag, 31. Januar 2013 21:23 Zusammenführung Plan
Donnerstag, 28. Juli 2011 10:45
Antworten
-
Du scheiterst daran, daß Diskpart keinen konventionellen Errorlevelliefert, sondern den hexadezimalen Winerror - z.B. 0x8007005. Und dasevaluiert dann zu -2147024809. Bin mir nicht ganz sicher, ob negativeZahlen überhaupt zulässig sind, aber auf jeden Fall ist das kleiner als 1 :)Stell auf "if %errorlevel% NEQ 0" um, das geht.mfg Martin
A bissle "Experience", a bissle GMV...- Als Antwort vorgeschlagen Michael Bormann Freitag, 29. Juli 2011 16:59
- Als Antwort markiert Losmirkos Montag, 1. August 2011 07:52
Freitag, 29. Juli 2011 13:48
Alle Antworten
-
Hallo Mirko,
In der entsprechenden Batch fragt man nicht auf 0 sondern höher 0 ab
If errorlevel 1 goto fehler
echo - geklappt
goto end
:fehler
Echo - klappt nicht
:end
----------------
If errorlevel == 1 goto fehler1
^^^^^^^^^^^ da wird explizit auf 1 abgefragt und auch so behandelt, das erste Beispiel wirft alles >= 1 als Treffer aus, das nimmst du für deine Batch.
mfg Michael | www.mbormann.deDonnerstag, 28. Juli 2011 11:28 -
Hallo,
genau so mache ich es auch, hier die zwei Zeilen aus meinem Batch:
diskpart /s prepare_hdd.txt > x:\diskpart.log
if errorlevel 1 goto diskpart_problemDas Problem ist, dass diskpart keinen errorlevel > 0 liefert, wenn das Skript zwar korrekt ist aber fehlschlägt.
Any ideas?
Ciao
Mirko
Donnerstag, 28. Juli 2011 12:00 -
Hallo Mirko,
mir scheint des Rätsels Lösung ist "noerr" - damit wird jeglicher Fehler ignoriert und Diskpart wird dir immer 0 als Errorlevel bringen
Zumindest meine ich die Beschreibung so aufgefasst zu haben.
noerr
Nur für Skripting. Gibt an, dass DiskPart beim Auftreten eines Fehlers Befehle weiter so verarbeitet, als ob kein Fehler aufgetreten wäre. Ohne den Parameter noerr wird DiskPart beim Auftreten eines Fehlers mit einem Fehlercode beendet.
Gruss
Michael
mfg Michael | www.mbormann.deDonnerstag, 28. Juli 2011 17:15 -
Hallo Mirko,
> Wenn ich denn den Parameter noerr verwenden würde.
OH, dann stellt sich die Frage ob es ein Problem mit Diskpart selbst ist - welche Version?
oder die Umleitung. Allerdings müssten sich erheblich mehr darüber ausgelassen haben, wäre das so.
Kann es leider derzeit nicht austesten, evtl. hat einer der Mitleser eine Idee.
mfg Michael | www.mbormann.deFreitag, 29. Juli 2011 11:06 -
Du scheiterst daran, daß Diskpart keinen konventionellen Errorlevelliefert, sondern den hexadezimalen Winerror - z.B. 0x8007005. Und dasevaluiert dann zu -2147024809. Bin mir nicht ganz sicher, ob negativeZahlen überhaupt zulässig sind, aber auf jeden Fall ist das kleiner als 1 :)Stell auf "if %errorlevel% NEQ 0" um, das geht.mfg Martin
A bissle "Experience", a bissle GMV...- Als Antwort vorgeschlagen Michael Bormann Freitag, 29. Juli 2011 16:59
- Als Antwort markiert Losmirkos Montag, 1. August 2011 07:52
Freitag, 29. Juli 2011 13:48 -
Guten Montag,
habs ausprobiert und funktioniert. Die Frage ist nur: Was soll das? Warum liefert Diskpart einen negativen Errorlevel, im Kontrast zu allen anderen Kommandozeilentools die mir bekannt sind? Und: warum ist das nicht dokumentiert? z.B. hier: http://support.microsoft.com/kb/300415/de
Ciao
Mirko
Montag, 1. August 2011 07:54 -
> Warum liefert Diskpart einen negativen Errorlevel, im Kontrast zu allenTut es nicht - es liefert einen 32 Bit UNSIGNED Integer Errorlevel(guckst Du z.B. mal hier:http://msdn.microsoft.com/en-us/library/ms819772.aspx). Leider kann cmddiesen Range nicht als RC verarbeiten, da hier 32 Bit SIGNED Integerverwendet wird - es kommt zu einem Überlauf und die Zahl wird negativ.> anderen Kommandozeilentools die mir bekannt sind? Und: warum ist das> nicht dokumentiert? z.B. hier: http://support.microsoft.com/kb/300415/deDer Artikel ist noch für XP...mfg Martin
A bissle "Experience", a bissle GMV...Montag, 1. August 2011 08:11 -
Hallo,
Hmm, für mich bleiben trotzdem Fragen offen:
- warum produziert ein commandline tool einen return wert, den cmd nicht verarbeiten kann?
- hat sich diskpart unter XP schon so verhalten? Warum ist das nicht dokumentiert?
- gibt es eine neue Doku für diskpart unter Win 7? Ich hab keine gefunden... Ist das da dokumentiert?
- Die diskpart doku listet ja eine ganze Reihe von errorlevels auf. Warum diesen nicht?
Also, für mich ist das ein bug. Andere User werden genauso drüber stolpern wie ich, denn es gibt keine Dokumentation darüber und diskpart verhält sich anders als alle commandline tools die mir bekannt sind.
Wo kann man sowas reporten?
Ciao
Mirko
Montag, 1. August 2011 08:40 -
Hallo, Mirko.> - warum produziert ein commandline tool einen return wert, den cmd nicht> verarbeiten kann?Weil man's auch aus VBS oder PS1 aufrufen kann, und da geht das mit 32Bit RCs wunderbar.> - hat sich diskpart unter XP schon so verhalten? Warum ist das nicht> dokumentiert?Nein, da kommen die im 300415 dokumentierten RCs - aber die sind für einanständiges Errorhandling nicht ausreichen.> - gibt es eine neue Doku für diskpart unter Win 7? Ich hab keine> gefunden... Ist das da dokumentiert?Ich hab auch nix gefunden. Aber in winerror.h sind die RCs alle drin.Und damit dann auch z.B. mit winerror.exe (SDK) oder err.exeleicht auswertbar.> - Die diskpart doku listet ja eine ganze Reihe von errorlevels auf.> Warum diesen nicht?S.o. - galt für XP.> Also, für mich ist das ein bug. Andere User werden genauso drüberNein, kein Bug. Definitiv "Feature", nur daß es nicht dokumentiertwurde, ist etwas ärgerlich.mfg Martin
A bissle "Experience", a bissle GMV...Montag, 1. August 2011 11:04