Gibt es eine globale, persistente CMD-Geschichte?

99

Manchmal vergesse ich, wie die exakte Syntax eines CMD-Befehls aussieht, und möchte dann meine eigene CMD-Historie durchsuchen. Natürlich können Sie in derselben Sitzung mit den Aufwärts- und Abwärtspfeiltasten navigieren, aber wie sieht es mit dem Verlauf früherer CMD-Sitzungen aus? Gibt es eine Datei, ein Protokoll, in das der Verlauf geschrieben wird, oder geht alles in das digitale Nirvana?

Vielen Dank!

Raoulsson
quelle
Sie können den Befehl exit hijacken, um ein Protokoll vor dem Beenden automatisch zu speichern. doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*Sie müssen jedoch herausfinden, wie dies bei jedem Start der Eingabeaufforderungssitzung automatisch ausgeführt wird. PS: Stellen Sie sicher, dass der Pfad der Protokolldatei beschreibbar ist. C:\ ist für eine Eingabeaufforderung, die kein Administrator ist, nicht beschreibbar.
ADTC
@ADTC: AutoRun sollte behandeln 'jeden Start': superuser.com/a/302553/333316 oder stackoverflow.com/a/17405182/2868801
dave_thompson_085

Antworten:

30

Nein, der Windows-Eingabeaufforderungsverlauf kann nicht gespeichert werden, wenn eine Sitzung endet.

Massimo
quelle
3
wirklich? woher weißt du das? Entschuldige, dass du gefragt hast, ich denke du hast recht, aber wie kannst du es wissen, wenn du nicht das verdammte Ding programmiert
hast?
7
Ok, lassen Sie mich umformulieren :-) Der Windows-Befehlsinterpreter ("cmd.exe") bietet keine Unterstützung für das Speichern / Exportieren / Speichern des Verlaufs. Andernfalls hat Microsoft ihn nicht dokumentiert und niemand war jemals in der Lage, dies zu tun es zu finden. Sie können natürlich versuchen, das zu umgehen, wie Sean vorgeschlagen hat, aber es gibt (oder scheint) keine eingebaute Unterstützung dafür.
Massimo
18
Sie können F7 drücken, um eine Verlaufsliste der aktuellen Sitzung anzuzeigen.
Jftuga
4
AKTUELLE Sitzung ist hier das Schlüsselwort.
Massimo
3
Sie können den Verlauf anzeigen / speichern, indem Sie ausführen doskey.exe /history(von dort stammt übrigens auch die F7-Verknüpfung). Sie können ihn jedoch nicht in Ihrer nächsten Sitzung erneut laden.
Coderer
68

Nicht nativ, aber lesen Sie: http://mridgers.github.io/clink/ , macht cmd.exe viel produktiver. Zitieren von Funktionen von der Projektseite:

Powerful Bash-like line editing from GNU's Readline library.
Superior path completion (TAB).
Paste from clipboard (Ctrl-V).
Support for the completion of executables/commands, and environment variables.
Undo/Redo (Ctrl-_ or Ctrl-X, Ctrl-U)
Improved command line history.
Persists across sessions.
Searchable (Ctrl-R and Ctrl-S).
History expansion (e.g. !!, !<string>, and !$).
Scriptable completion using Lua.
Robert Bak
quelle
3
klirren alles gelöst
Still.Tony
5
Gibt es Pläne, es standardmäßig in Windows einzuschließen? : D
Jaime Hablutzel
Können Sie ~/.inputrcbei der Verwendung von clink einen Wert einstellen ? (und wissen Sie, ob es Konsole oder etwas verwendet werden kann?)
Mike HR
Lesen Sie anscheinend das Dokument github.com/mridgers/clink/blob/master/docs/clink.md .
Baris Demiray
... außer Aliase. clinkhasst doskey; Vergessen Sie all Ihre jahrelangen und sorgfältig zugewiesenen Aliasnamen. Deshalb habe ich aufgehört, es zu benutzen. obwohl ich alle Funktionen vermisse.
15

Massimo hat Recht, dass der Verlauf Ihrer Eingabeaufforderung nicht über mehrere Sitzungen hinweg erhalten bleibt. Sie können dies manuell abrufen, bevor Sie die Eingabeaufforderung schließen, indem Sie doskey / history> history.txt eingeben

Oder ... Sie könnten PowerShell als CMD-Eingabeaufforderung verwenden und diesem Beitrag folgen, um Ihren Verlauf über mehrere Sitzungen hinweg beizubehalten.

Sean Earp
quelle
11

Sie können klirren .

Clink kombiniert die native Windows-Shell cmd.exe mit den leistungsstarken Befehlszeilen-Bearbeitungsfunktionen der GNU Readline-Bibliothek, die umfangreiche Funktionen für Vervollständigung, Verlauf und Zeilenbearbeitung bietet.

Der einfachste Weg, Klirren zu installieren, ist die Verwendung von chocolatey . Sobald Sie chocolatey installiert haben, können Sie clink durch Eingabe installieren

choco install clink

Ab dem nächsten Start von cmd.exe sollte der Verlauf sitzungsübergreifend gespeichert werden.

Joji Antony
quelle
Schließlich beschlossen, Chocolateywegen dieses Beitrags einen Schuss zu geben . Die Installation war so einfach wie unter brewmacOS. Und jetzt habe ich eine Bash-ähnliche Eingabeaufforderung in Windows!
TranslucentCloud
6

Es ist möglich, den aktuellen Verlauf in einer Datei zu speichern.

`$ doskey /history > somefile.txt`

Aber es scheint, dass es keine Möglichkeit gibt, es als Verlauf zurückzuladen. Es ist nur möglich, ein Befehlszeilenargument zu verwenden, um alle Zeilen zu laden und auszuführen.

cmd.exe /K somefile.txt

, was nützlich sein kann, um eine Liste von Doskey-Makros zu laden. Dieser Aufruf kann in einer Verknüpfung enthalten sein, sodass Sie ihn nicht jedes Mal eingeben müssen. Diese Referenz enthält einige zusätzliche Informationen zu diesem Ansatz .

Es gibt eine ähnliche Frage zum Superuser , die einige Alternativen enthält, darunter das Klicken , wie von @RobertBak vorgeschlagen.

mMontu
quelle
Hmm, um es wieder in den Verlauf zu laden, müssen Sie es nicht einfach in einer .bat-Datei speichern und ausführen?
Pacerier
1
Wenn @Pacerier die Befehle erneut ausführt, werden sie sicherlich wieder in den Verlauf aufgenommen, aber es werden wahrscheinlich große Nebenwirkungen auftreten. Stellen Sie sich vor, Sie löschen einige Dateien über die Shell und erstellen sie dann außerhalb der Shell in einem langen und schmerzhaften Prozess neu. Das erneute Laden des Verlaufs durch Ihre Prozedur würde die Dateien unerwartet wieder löschen.
Montag,
@ Pacerier Sie erkennen, "run it" bedeutet, alle diese Befehle auszuführen, nicht wahr? Es geht nicht nur darum, sie in den Verlauf zu laden, sondern sie tatsächlich einige Auswirkungen auf Ihr System haben zu lassen.
ADTC
1

Befehlsverlauf: Um einen Befehlsverlauf zu aktivieren (auf den Sie mit den Aufwärts- und Abwärtspfeiltasten zugreifen können), führen Sie einfach doskey an der Eingabeaufforderung aus. So erstellen Sie beispielsweise einen Befehlsverlauf mit 100 Elementen:

doskey /listsize=100

Ref: https://users.cs.jmu.edu/bernstdh/web/common/help/ntshell.php

Moataz AL Dawood
quelle
3
Das beantwortet die Frage überhaupt nicht?
Chopper3
1
Funktioniert nicht unter Windows 10.
TranslucentCloud
1

Klirren ist nett und der Autor veröffentlicht bei jeder Veröffentlichung ein schokoladiges Paket, allerdings würde ich DeepBlueCLI empfehlen.

Sie können https://github.com/sans-blue-team/DeepBlueCLI verwenden , um die Windows-Sicherheitsereignis-ID 4688 einzurichten.

DeepBlueCLI verwendet für PowerShell auch die Modulprotokollierung (PowerShell-Ereignis 4013) und die Skriptblockprotokollierung (4104). Es wird keine Transkription verwendet.

Der zusätzliche Vorteil besteht darin, dass der Hash der Befehlszeilen-Exe im AppLocker-Ereignisprotokoll protokolliert wird. Quelle: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

Da diese Lösung die Windows-Ereignisprotokollinfrastruktur verwendet, können Sie sie auch über WMI oder PowerShell abfragen Get-EventLog. Mit clink müssen Sie ein anderes Tool erlernen, um system- oder netzwerkweite Verhaltensmuster zu erkennen.

John Zabroski
quelle
1
Ereignis 4688 ist der Schlüssel und das ist der zentrale Speicher, in dem Windows alle ausgeführten Befehle aufzeichnet. Alle anderen Tools lesen gerade und suchen nach diesem Ereignis. Vielen Dank. Aber standardmäßig ist es nicht aktiviert: itprotoday.com/strategy/…
Peter Teoh