Unterschied zwischen Cmd und Power Shell?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Cmd ist ein "Kind" der der 80er Jahre des vergangen Jahrhunderts, welches "mit Gewalt" in die heutige Zeit mitgeschleppt wurde.

  • Dabei wurde peinlichst auf Kombatibilität zu bestehenden Batches (StabelverarbeitungsScripten)(.bat, .cmd) geachtet.
  • Es gab aus DOS- und Wndows 3.x/95/98 -Zeiten unmengen an administrativen Automatisierungsdateien , welche problemlos weiterfunktionieren mussten.
  • Es war wohl eine ökonomische Erwägung Batch auf "Teufel komm raus" am Leben zu erhalten, denn es wäre eine Sisyphusaufgabe gewesen Millionen Batches in eine neues Sprache zu portieren.

Für die die meisten Sprachen gibt es Übersetzungsprogramme. Für Batch ein Ding der Unmöglichkeit. Solange eine Batch sich sauber an die Konventionen hält ist es daurchaus möglich, aber schon die Art wie Batch den Output anderer Programme und den Inhalt von Dateien auswertet macht die Sache sehr Komplex.

Batch/CMD verwendet für die Datenanalyse den Befehl FOR /F .

...ein Monster , welches sogar hartgesottene Prrogrammierer in den Wahnsinn treiben kann. Mit der Einführung Windows mit langen Dateinamen wurde der bestehende ForBefehl mit einigen "Krücken" versehen , die leider nicht noch mehr Chaos schufen.

Batch ist wie ein altes Haus, für das man für jedes neue Familienmitglied ein neues Zimmer angebaut hat.

Darüber hinaus arrangierten sich die Programmierer mit den Macken und Fehlern in Batch und lernten mit der Bestie zu leben und missbrauchten Fehler und Eigenheiten für ihre eigenen fiesen kleinen Tricks. (Ich könnte ein ganzes Buch damit füllen, wer sich für solche Tricksereien interessiert muss nur mal in meinen Antworten zu Batch suchen)

Batch konnte /kann nicht aus eigner Kraft direkt auf die Hardware zugreifen . Zu DOS Zeiten behalf man sich mit dem Debug-Befehl um aus der Hüfte kleine Hilfsprogramme zu erzeugen, welche diese Lücke füllten.

Mit Windows und dem Protectet-Mode des Prozessors wurde diese Hintertür verschlossen. Abhilfe sollte der Scriptinghost (CScript/WScript/msHTA) schaffen. Die neuen Scriptsprachen VBScript,JScript und HTA schaffen. Aber wie bei allem Neuen ist es schwer gegen etwas anzukommen, was sich fest etabliert hat.

Die neuen Sprachen waren mächtig und hätten ohne weiteres Batch ablösen können. Allerdings gab es Sicherheitsbedenken hinsichtlich ihrer Macht und es wurde ein Schalter eingebaut um den "Start der neuen Scripte per Mausklick" zu verhindern. Über Batch/Cmd konnte man diese sehr wohl starten. Und so wurden die Neuen zu einem Existenz als Sklaven und Zuarbeiter von Batch degradiert. (Wenn ich schon eine Batch benötige um ein VB-/JavaScript zu starten kann ich auch gleich bei Batch bleiben)

...und damit wären wir auch schon bei Powershell.

Mit Powershell wollte man alles Richtig machen. Objectorientiert, aus einem Guss, Konsistente Datenstrukturen (bei denen man nicht mit dem For/f und Tokens zaubern muss) , voller Zugriff auf alle Systemkomponenten und individuelle Erweiterbarkeit durch .Net.

Es hätte so schön sein können, Powershell ist wirklich der Hammer. Powershell war der feuchte Traum jedes Administrators..., aber auch jedes Hackers. Voller Zugriff auf alle Systemresourcen... ohne Compiler und Entwicklungsumgebung... geil. Zu geil... plötzlich gab es Schadscripte in Massen , während die Administratoren noch dabei waren auf Powershell unzulernen.

Die Hintertür ins Herz des System musste unbedingt verschlossen werden.

...und so wurden mit ExecutionPolicys dem neuen Überflieger die die Flügel gestutzt.

Wenn ich als Administrator jedoch folgend Zeile ausführen muss um ein Powershellscript mit Adminrechten zu starten:

PowerShell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy Bypass -File ""myScript.ps1""' -Verb RunAs}"

...vergeht mir die Lust... ein BatchScript klicke ich an oder rufe es so auf:

MyBatch.cmd

zum Starten einer Batch als Admin muss ich schlimmstenfalls Rechtsklicken ...ausführen als Admi... damit kann man Leben...

...und so blieb auch ich mit meinen Batcherfahrungen lieber bei Batch/CMD . Kleine Powershell Scripte lassen sich aus einer Batch heraus als InlineScript/Powershellkommandozeile ohne Policys ausführen.

Und somit teilt Powershell das Los seiner Vorgänger --- ein Dasein als Wasserträger für Batch...😤. Der Riese in Ketten...

Mit Windows 10 wird bei der Installation schon gefragt ob Powershell statt CMD als Console gestartet werden soll. Toll...

🤔...nur kann man noch immer nicht ohne Herumgefrickel ein Powershellscript ausfühern... (wohl aber eine Batch, welche ein Powershellscript ausführt). Man sagt dem Riesen er soll einen Greis herbeirufen, welcher ihm die Ketten abnimmt, die ihn daran hindern eine Liste von Aufgaben abzuarbeiten.

Auf den Punkt gebracht:

Batch ist alt, giftig, verbugt, umständlich in der Datenauswertung, aber jeder gute Admin beherrscht.

Powershell ist Moden, Konsistent, Schnell, mit vollem direkten Zugriff auf alle Systemkomponenten, Erweiterbar. Administratoren können damit umgehen, mögen es jedoch nicht wegen der Beschränkungen.

Eine verpasste Chance.

(Inzwischen ist das in Windows 10 integrierte Powershell bei 5.1 eingefroren, während die Welt sich weiterdreht und das neue Powershell Core inzwischen bei 7 angekommen ist.) es wird auch auf 5 Stehen bleiben... Nur Enthusiasten können freiwillig aufsteigen, haben aber ein Problem mit der Kompatibilität auf "StandardSystemen"

Ein totales HeckMeck... Da lobe ich mir Batch . Was ich in Batch schreibe läuft garantiert auf jedem Windowssystem.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Powershell bietet alles was CMD bietet + viele zusätzliche Möglichkeiten und Verbesserungen.

CMD ist halt CMD. Das ist wie ein Fahrrad mit einem LKW zu vergleichen.


Erzesel  07.04.2020, 19:41

Dein Vergleich hinkt.

  • Batch ist der Dirigent der der ein Orchester dirigiert.
  • Powershell ist ein Musiker der alle Instrumente allen spielen kann, es aber nicht darf.

Guten Tag Bb4cm,

CMD ist quasi die ältere Version von PowerShell.

PowerShell bietet die selbe Funktionalität wie CMD aber ist jedoch erweiterbar. Einige Entwickler haben sich auf die PowerShell spezialisiert und können diese anhand von "Skripten" erweitern und somit Funktionen hinzufügen was in CMD nicht möglich ist.

Zudem enthält die PowerShell grundsätzlich mehr Befehle als unser CMD.

Ich hoffe diese kurze Erklärung hat dir weitergeholfen.

Mit freundlichen Grüßen

RoyBlunk

Woher ich das weiß:Studium / Ausbildung

timlg07  08.04.2020, 21:15
PowerShell bietet die selbe Funktionalität wie CMD aber ist jedoch erweiterbar. Einige Entwickler haben sich auf die PowerShell spezialisiert und können diese anhand von "Skripten" erweitern und somit Funktionen hinzufügen was in CMD nicht möglich ist.

Ähm was genau meinst du damit? Auch cmd lässt sich mit "Skripten" "erweitern".

Erzesel  07.04.2020, 19:48
CMD ist quasi die ältere Version von PowerShell.

echt mal? Das wüsste ich aber...

können diese anhand von "Skripten" erweitern und somit Funktionen hinzufügen was in CMD nicht möglich ist

ist mir neu, jeder professionelle Systemadministrator hat ein ganzes Sammelsurium an Erweiterungen für CMD.

Der Aufruf eine läppische Powershellscripts gestalltet sich jedoch zur Tortur...

CMD = Alt und Befehlsarm

Powershell = Neu, und viel mehr befehlsmöglichkeiten


Erzesel  07.04.2020, 19:32

...oh je... wer mit Batch richtig umgehen kann verfügt über alle Befehle von Powershell, VBS,JS, und die .Netsprachen..., Man muss nur wissen wie!

Administratoren haben ihre Gründe, warum sie es in 13 Jahren Powershell nicht geschaft haben umzusteigen .

Powershell ist toll... aber im täglichen Gebrauch konnte es sich nie wirklich durchsetzen.

Gib mal ein:

in cmd:

dir /?

in PS:

Get-Help Get-ChildItem