Losoft Referenz für die Kommandozeile
Mitglieder: 9
Ziel: NT / 2000
EN DE

Freeware-Dienstprogramme für die Kommandozeile: Sammlung und Schalter

Neun kleine Programme, jedes für eine Sache, die die Shell der Zeit nicht konnte. Als Satz gelesen ist diese Sammlung von Freeware-Dienstprogrammen für die Kommandozeile eine ziemlich genaue Bestandsaufnahme dessen, was Windows NT fehlte, und weil die meisten Lücken inzwischen geschlossen sind, taugt sie auch als Karte von einem alten Schalter zu dem Befehl, der ihn ersetzt hat.

Die neun Konsolenprogramme, gruppiert nach ihrem Schicksal: sieben mit eingebautem Ersatz, eines dessen Problem es nicht mehr gibt, und eines bewusst ohne Nachfolger.

Die Sammlung und warum es sie gab

LS-Tools erschien zwischen etwa 1997 und 2002 als Freeware für Windows NT und wuchs um ein Programm nach dem anderen. Es gab kein Installationsprogramm und kein Rahmenwerk: jedes Mitglied war eine einzelne Konsolenanwendung, die ihren eigenen Hilfetext ausgab, wenn man sie mit dem Hilfeschalter aufrief. Diesem Format verdankt die Dokumentation ihre gute Überlieferung. Die gesamte Schnittstelle jedes Werkzeugs passt auf einen Bildschirm.

Die Auswahl hat eine erkennbare Logik, sobald man sie danach gruppiert, worauf sie zugreift. Zwei Programme betreffen Energie und Sitzungen, zwei Identität und Zugriff, drei sind Pipeline-Installationsmaterial, eines greift in das Dateisystem auf eine Weise ein, die die Shell nicht zugänglich machte, und eines ist ein Build-Helfer. Nichts in dem Satz überschneidet sich mit etwas anderem darin.

Mitglieder und ihre Nachfolger

ProgrammAufgabeErsetzt durch
ln.exeHardlink auf NTFS anlegenmklink /H, fsutil hardlink
down.exeherunterfahren, neu starten, abmelden, Energiesparmodus, Ruhezustand: lokal oder remoteshutdown, powercfg
apm.exeAkkuzustand; Energiesparmodus oder Ruhezustandpowercfg, Get-CimInstance Win32_Battery
errortext.exeWin32-Fehlernummer in Text übersetzennet helpmsg, certutil -error
clipdump.exeZwischenablage auf die Standardausgabe schreibenGet-Clipboard (kein eingebautes Konsolen-Äquivalent)
copytosystem.exeDateien ins Systemverzeichnis kopieren, unter 9x und NT gleichnichts. Das Zwei-Familien-Problem ist weg
scacl.exeZugriffslisten von Diensten und Treibern anzeigen und ändernsc sdshow, sc sdset
who.exeaktuelles Konto, Gruppen und Privilegien ausgebenwhoami /all
setenv.exeUmgebungsvariable in einem anderen Prozess setzennichts Unterstütztes: for /f in der Gegenrichtung

Hardlinks, bevor die Shell sie zugab

NTFS unterstützt Hardlinks seit seiner ersten Fassung, und jahrelang machte kein mitgelieferter Befehl sie zugänglich. ln.exe tat es, in einer Zeile, mit dem bewusst aus der Unix-Welt geliehenen Namen, der sagte, was es war.

USAGE: ln FILE LINK

  FILE   Name einer bestehenden Datei (das Linkziel)
  LINK   Name des anzulegenden Links. Eine bestehende Datei dieses Namens wird überschrieben.

Hinweis: NTFS unterstützt Hardlinks nur auf Dateien.

Das Überschreiben in diesem Hinweis ist im Gedächtnis zu behalten, falls einmal ein Skript auftaucht, das das Programm benutzt. Es gibt keine Rückfrage und keinen Probelauf. Die heutigen Entsprechungen sind vorsichtiger: mklink /H überschreibt nicht, und fsutil hardlink list nennt die Zahl der Namen, die eine Datei schon hat. Die Frage, die vor dem Löschen eines Namens zählt.

Identität, Fehlercodes und Zwischenablage: die Pipeline-Schalter

Drei der Programme existieren, weil ein Skript einen Wert brauchte, den die Shell nicht liefern konnte. who.exe beantwortete „wer bin ich, worin bin ich, und was darf ich", mit getrennten Schaltern für Konto, Gruppenliste, Gruppenliste mit Kennungen, Privilegien und Privilegien mit Erläuterung.

USAGE: Who.exe [/u /g /G /p /P /a /A /n]

  /u  Kontoinformationen              /p  Privilegien
  /g  Gruppenmitgliedschaften         /P  Privilegien mit Erläuterung
  /G  Gruppen mit SIDs                /a  alles (= /u /g /p)
  /n  Versionsbanner unterdrücken     /A  alles, ausführlich (= /u /G /P)

Das ist heute whoami /all, und die Ersetzung ist exakt. Übernehmen lohnt sich die eine Gewohnheit mit dem Banner-Schalter: ein Programm, das seinen Namen und seine Version über die Ausgabe schreibt, bricht jedes Skript, das die erste Zeile auswertet, und die Werkzeuge dieser Zeit boten fast alle einen Weg, das abzuschalten.

errortext.exe machte aus 0x5 ein „Zugriff verweigert", was belanglos klingt, bis man ein Protokoll voller nackter Zahlen gelesen hat. clipdump.exe schrieb die Zwischenablage auf die Standardausgabe und ist das still Nützlichste der neun, denn der eingebaute clip schreibt nur. Eine Batchdatei, die die Zwischenablage lesen will, muss weiterhin PowerShell aufrufen.

Der Umgebungsvariablen-Trick und warum ihn nichts ersetzt hat

setenv.exe setzte eine Umgebungsvariable im Elternprozess oder in einem über die Kennung benannten Prozess und konnte den Wert aus der Standardeingabe nehmen. Damit konnte eine Batchdatei die Ausgabe eines beliebigen Befehls in eine Variable fangen: etwas, das die Shell jener Zeit einfach nicht konnte.

USAGE: setenv [/stdin /stderr] [/P[=] <pid>] <varname[=]> <wert>

  /P <pid>  Zielprozess, dezimal oder mit 0x. Weggelassen oder null heißt Elternprozess.
  /stdin    Eingabe von der Befehlszeile, solange vorhanden, danach von der Standardeingabe

Beispiele:
  time /T | setenv /stdin TIME1        ← aktuelle Zeit in TIME1 leiten
  setenv /P 4711 INCLUDE C:\Inc        ← INCLUDE für Prozess 4711 setzen

Kein unterstützter Befehl tut das, und keiner sollte: ein Prozess besitzt seinen Umgebungsblock, und in einen fremden zu schreiben heißt, in fremden Speicher zu schreiben. Die Lücke schloss sich von der anderen Seite. for /f fängt Befehlsausgabe in eine Shell-Variable, und in PowerShell tut es eine Zuweisung. Die Lehre verallgemeinert sich: hat ein altes Programm keine heutige Entsprechung, liegt das meist daran, dass das Problem an anderer Stelle gelöst wurde, und nicht daran, dass die Fähigkeit verloren ging.

Energie, Sitzungen und die zwei mit eigener Seite

apm.exe meldete den Akkuzustand und konnte den Rechner über die Vor-ACPI-Schnittstelle in den Energiesparmodus oder Ruhezustand schicken; die späte Fassung gab auch die Restlaufzeit aus, wenn die Hardware sie lieferte. Alles davon steckt heute in powercfg, samt der Diagnose, die beantwortet, warum ein Rechner nicht schlafen bleibt.

Die zwei Schwergewichte der Sammlung haben genug Fläche für eigene Seiten. down.exe erreichte Energiezustände auf Remote-Rechnern, die die dokumentierte Schnittstelle nicht anbietet, indem es sich auf das Ziel kopierte und dort lief: Mechanismus und Folgen stehen auf der Seite zu Remote-Shutdown. scacl.exe bearbeitete die Zugriffsliste von Diensten und Treibern, mit der Buchstabennotation, die bis heute der klarste Weg ist, einen Dienstdeskriptor zu lesen; das steht auf der Seite zu Dienstrechten.

Zusammen gelesen zeigen diese Freeware-Dienstprogramme für die Kommandozeile auch, wo der Ersatz aufhört. Sieben der neun lassen sich auf einen eingebauten Befehl abbilden, zwei nicht: copytosystem.exe löste ein Problem, das es nicht mehr gibt, nämlich eine Binärdatei für die 9x- und die NT-Familie zugleich, und setenv.exe hat überhaupt keine unterstützte Entsprechung. In die Umgebung eines fremden Prozesses zu schreiben bietet das heutige Windows nicht, ein Skript, das darauf baute, muss also umgedreht werden und einen Wert aus dem Kindprozess lesen statt einen hineinzuschreiben.

Fragen zu diesen Dienstprogrammen

Funktionieren Hardlinks unter Windows wirklich?

Ja, auf NTFS, und das seit Windows NT. Ein Hardlink ist ein zweiter Verzeichniseintrag auf denselben Dateidatensatz, beide Namen sind also gleichwertig, und die Daten bestehen, bis der letzte gelöscht ist. Die Einschränkung: beide Namen müssen auf demselben Datenträger liegen und das Ziel muss eine Datei sein. NTFS kennt keine Hardlinks auf Verzeichnisse, dafür gibt es Verzweigungen.

Was ist heute die Entsprechung eines Hardlink-Werkzeugs?

mklink /H Link Ziel für einen Hardlink und mklink /J für eine Verzeichnisverzweigung, beide seit Windows Vista eingebaut. fsutil hardlink create tut dasselbe und listet zusätzlich bestehende Links auf eine Datei, was mklink nicht kann.

Kann ein Programm eine Umgebungsvariable in seiner übergeordneten Shell setzen?

Über die dokumentierte Schnittstelle nicht. Ein Prozess besitzt seinen eigenen Umgebungsblock; ein Kindprozess kann den des Elternprozesses nicht ändern. Werkzeuge, die es scheinbar konnten, schrieben direkt in den Speicher des anderen Prozesses. Das funktionierte und ist nicht tragfähig. Der übliche Weg ist der umgekehrte: das Kind gibt den Wert aus, die Shell fängt ihn auf, wofür for /f existiert.

Warum funktioniert clip nur in eine Richtung?

Der eingebaute Befehl clip schreibt die Zwischenablage aus der Standardeingabe und hat überhaupt keine Leserichtung. Sie aus einer Batchdatei zu lesen braucht PowerShell, also Get-Clipboard, oder ein Hilfsprogramm. Diese Asymmetrie ist der Grund, warum ein kleines Zwischenablage-nach-stdout-Programm jahrelang mitgeschleppt wurde.

Wie übersetze ich eine Fehlernummer wie 0x5 in Text?

net helpmsg 5 für einen dezimalen Systemfehler und certutil -error 0x80070005 für einen hexadezimalen inklusive COM-Ergebnissen. Beide lesen dieselben Meldungstabellen wie ein spezialisiertes Werkzeug, das frühere Programm hat also einen eingebauten Ersatz.

Ist APM-Energieverwaltung noch relevant?

Nein. Die Schnittstelle, die diese Werkzeuge nutzten, ist älter als ACPI, und alles ab Windows 2000 verwendet das neuere Modell. powercfg deckt dasselbe Feld und viel mehr ab, darunter die Frage, welche Geräte den Rechner wecken dürfen. Die eigentlich entscheidende, wenn ein Energiesparmodus nicht hält.

Was konnte who.exe, das whoami nicht kann?

Heute nichts. whoami /all gibt Konto, Gruppenmitgliedschaften mit ihren Kennungen und Privilegien mit Erläuterungen aus: die vollständige Ausgabe, die das ältere Werkzeug aus drei getrennten Schaltern zusammensetzte. Bevor whoami zum Lieferumfang gehörte, brauchte diese Information ein Hilfsprogramm.

Laufen 32-Bit-Werkzeuge dieser Zeit noch?

Eine 32-Bit-Konsolenbinärdatei startet auf 64-Bit-Windows in der Regel über die Kompatibilitätsschicht. Ob sie etwas Sinnvolles tut, ist die andere Frage: einige riefen Schnittstellen auf, die entfernt oder ersetzt wurden, und eines lief für seine Arbeit als Dienst, was heutige Sicherheitsvorgaben erschweren. Als Dokumentation behandeln, nicht als Software.

Welche davon brauchten Administratorrechte?

Das Remote-Shutdown-Hilfsprogramm auf dem Ziel, weil es dort einen Dienst installierte. Das Ändern einer Dienst-Zugriffsliste auf dem geänderten Objekt. Der Rest lief, abgesehen von Hardlinks, die Schreibrecht im Verzeichnis brauchen, als gewöhnliches Konto, was Teil des Sinns der Sammlung war.

Woher kam die MFC-Abhängigkeit?

Zwei Laufzeitarchive lagen der Sammlung bei, weil einige der grafischen Bestandteile dynamisch gegen die Microsoft Foundation Classes gebunden waren statt statisch. Die Konsolenprogramme brauchten sie nicht. Eine fehlende Laufzeitbibliothek, die einen sofortigen Startfehler erzeugt, war ein Alltagsärgernis der Epoche und der Grund für diese Archive.

← Zurück: Werkzeuge Stand: 2026-08-21 Weiter: Dienstrechte →