Gibt es verschiedene DISM.exe komands?
Guten Tag. Ich hab gerade mit cmd nach kaputten System Dateien gesucht aber dabei bin ich auf 2 verschiedene DISM komands gestoßen:
DISM.exe /online /cleanup-image /restorehealth
Und:
DISM /Online /Cleanup-Image /RestoreHealth
Also eins ist ohne .exe und eine mit .exe
Beide scheinen zu funktionieren aber warum gibt es zwei davon?
Sind das unterschiedliche Befehle?
LG
3 Antworten
Wenn Du ein Programm ohne Pfadangabe und/oder Dateiendung aufrufst, begibt sich das Betriebssystem auf folgende Suche:
- Im aktuellen Ordner nach einer Datei mit dem angegebenen Namen und einer In der Umgebungsvariable %PathExt% definierten Datei schauen. und wenn eine solche vorhanden ist ausführen.
- Ist dort keine vorhanden werden alle in der Variable %Path% definierten Ordner in gleicher Weise "abgeklappert" bis eine Datei gefunden wird (oder nicht)
Die genannten Variablen kannst du mit folgenden Kommandos anzeigen:
echo %PathExt%
echo %Path%
set Path
set gefolgt von ersten Teil eines VariablenNamen zeigt alle Variablen an, welche in gleicher Weise beginnen.
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
...wenn Du also dism eingibst, sucht das System automatisch nach dism.com, dism.exe, dism.bat, dism.cmd, .....
...im Aufrufordner, C:\WINDOWS\system32 (dort findet er dism.exe, wenn ein nicht zuvor eine andere Datei mit einer der Endungen gefunden hat) wenn man absolut sicher sein möchte, das man nicht aus versehen eine andere Datei mit gleichem Namen aufruft. sollte man sogar...
C:\Windows\System32\Dism.exe .......
...verwenden. (macht nur kaum jemand)
Rein Theoretisch könnte ein böswilliger Mensch einen Virus dism.com nennen und ins Sytemverzeichnis kopieren. Dieser würde dann vor dism.exe erkannt. Dito gilt auch, wenn man einen eigenen Pfad an den Beginn der Path-variable einfügt! Deshalb , sollte man sich möglichst eindeutig auf das gewünschte Programm verweisen.
Das ist ganz einfach, da DISM ein Systemkommando ist und sich in System32 befindet, kennt CMD/PowerShell es. du musst also nicht die Extension mitgeben, da Windows das in diesem Falle selber vervollständig.
Gleiches gilt auch für slmgr, gibts in der Geschmacksrichtung slmgr.vbs und slmgr ohne vbs, beides gleich ;)
Also generell Programme kann man, sofern man sich in dem Verzeichnis dieser befindet, auch ohne exe aufrufen. Bestimmte Endungen sind dafür einfach mit vorgesehen ^^
Jup, beides ist ganz insgeheim DISM.exe, bloß sagt er dir das nicht ;)
CMD/PowerShell kennt es nicht! Allein der Verweis auf "c:\Windows\System32" in der Path-Variable und die eingetragene Endung .exe in der Variable PathExt Erlauben von der jeweiligen Shell-Session aufgerufenen systemnahen Funktionen die automatische Zuweisung. Die Shells wie cmd, Powershell , Explorer, etc. haben damit nichts zu schaffen die geben nur "Aufträge" weiter...
Du kannst ja mal spaßeshalber die Variablen ändern :
set PathExt=.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
dism
dito nach entfernen de Systempfades
Path=C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\
dism
Keine Sorge, set ändert ledig die Variablen-Kopie der aktuellen Session. Wird diese beendet, gilt wieder das in der Registry gespeicherte Orginal bzw. für Normalnutzer die Session-Kopie des Explorers/Desktop.
Es ist in diesem Fall eine etwas vereinfachte Antwort, ich hätte natürlich auch noch auf PATH eingehen können aber da die Frage nicht war; wie geht das oder kann mir das das jemand genauer erklären habe ich mich für eine mehr oder weniger leicht verständliche Antwort entschieden ^^
CMD Befehle sind nichts anderes als exe Dateien, die in system32 liegen. Somit werden die exe Dateien als Befehle erkannt und es kann ohne die Dateierweiterung darauf zugegriffen werden. Da CMD es aber auch zulässt, einfache Dateien auszuführen, kann auch die Dateierweiterung dazu angegeben werden, ohne die Funktion zu beeinträchtigen.
Den ersten teil hab ich verstanden aber das mit dateierweiterung versteh ich nicht ganz.
Sorry, war ein bisschen faul beim Schreiben. Ich meine einfach die Dateinamenerweiterung, also das .exe
Also sind die beiden Befehle das gleiche?