Existe-t-il un historique global et persistant de CMD?

99

Parfois, j'oublie à quoi ressemble la syntaxe exacte d'une commande CMD et j'aimerais ensuite effectuer une recherche dans mon propre historique CMD. Il est clair que vous pouvez parcourir la même session avec les flèches haut et bas, mais qu'en est-il de l'historique des sessions CMD antérieures? Existe-t-il un fichier, un journal dans lequel l'historique est écrit ou est-ce que tout va au numérique Nirvana?

Merci!

Raoulsson
la source
Vous pouvez pirater la commande exit pour enregistrer automatiquement un journal avant de quitter: doskey exit=doskey /history ^>^> C:\path\to\cmdhistory.log $T exit $*vous devez toutefois savoir comment l'exécuter automatiquement à chaque démarrage de session d'invite de commande. PS: Assurez-vous que le chemin du fichier journal est accessible en écriture. C:\ n'est pas accessible en écriture pour une invite de commande non-admin.
ADTC
@ADTC: AutoRun doit gérer 'chaque démarrage': superuser.com/a/302553/333316 ou stackoverflow.com/a/17405182/2868801
dave_thompson_085

Réponses:

30

Non, l'historique des invites de commande Windows ne peut pas être enregistré à la fin d'une session.

Massimo
la source
3
pour de vrai? comment sais-tu cela? Désolé de vous avoir interrogé, je suppose que vous avez raison, mais comment pouvez-vous savoir à moins de programmer cette fichue chose;)
raoulsson
7
Ok, permettez-moi de reformuler :-) L'interpréteur de commandes Windows ("cmd.exe") ne fournit aucun support pour l'enregistrement / l'exportation / la conservation de l'historique. Si tel est le cas, Microsoft ne l'a pas documenté et personne n'a jamais pu le faire. pour le trouver. Vous pouvez bien sûr essayer de contourner ce problème, comme l'a suggéré Sean, mais il n'y a (ou semble ne pas l'être) un support intégré pour cela.
Massimo
18
Vous pouvez appuyer sur F7 pour voir l’historique de la session en cours.
Jftuga
4
La session en cours est le mot clé ici.
Massimo
3
Vous pouvez voir / sauvegarder l'historique en exécutant doskey.exe /history(c'est aussi d'où le raccourci F7, BTW), mais il n'y a aucun moyen de le recharger lors de votre prochaine session.
Coderer
68

Pas de manière native, mais consultez: http://mridgers.github.io/clink/ , rend cmd.exe beaucoup plus productif. Citant les caractéristiques de la page du projet:

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
la source
3
clink a
5
Avez-vous l'intention de l'inclure par défaut dans Windows? : D
Jaime Hablutzel
Pouvez-vous définir un ~/.inputrclorsque vous utilisez Clink? (et savez-vous s'il peut être utilisé console ou quoi que ce soit?)
Mike HR
Apparemment, voir la doc github.com/mridgers/clink/blob/master/docs/clink.md .
Baris Demiray
... sauf les alias. clinkdéteste doskey; Oubliez tous vos pseudonymes longs et soigneusement attribués. c'est pourquoi j'ai arrêté de l'utiliser. bien que toutes les fonctionnalités me manquent.
15

Massimo a raison de dire que l'historique des invites de commande ne persiste pas d'une session à l'autre. Vous pouvez le saisir manuellement avant de fermer votre invite en tapant doskey / history> history.txt.

Ou ... vous pouvez utiliser PowerShell en tant qu'invite de CMD et suivre ce message pour conserver votre historique au cours des sessions.

Sean Earp
la source
11

Vous pouvez utiliser le clink .

Clink associe le shell Windows natif cmd.exe aux puissantes fonctions d'édition en ligne de commande de la bibliothèque GNU Readline, qui offre des fonctionnalités avancées de complétion, d'historique et d'édition de ligne.

Le moyen le plus simple d'installer Clink est d'utiliser Chocolatey . Une fois que vous avez installé Chocolatey, vous pouvez installer Clink en tapant

choco install clink

À partir de la prochaine fois que vous lancerez cmd.exe, celui-ci devrait stocker l'historique des sessions.

Joji Antony
la source
Finalement décidé de donner Chocolateyun coup de feu à cause de ce post. L'installation a été aussi simple que brewsous MacOS. Et maintenant, j'ai une invite de commande semblable à Bash dans Windows!
TranslucentCloud
6

Il est possible de sauvegarder l'historique actuel dans un fichier,

`$ doskey /history > somefile.txt`

Mais il semble qu'il n'y ait aucun moyen de le charger en tant qu'histoire. Il est possible d'utiliser uniquement un argument de ligne de commande pour charger et exécuter toutes les lignes,

cmd.exe /K somefile.txt

, ce qui peut être utile pour charger une liste de macros doskey. Cette invocation peut être incluse dans un raccourci afin que vous n'ayez pas besoin de la saisir à chaque fois; Cette référence contient des informations supplémentaires sur cette approche .

Il y a une question similaire sur Superuser qui apporte certaines alternatives, y compris clink , comme suggéré par @RobertBak.

mMontu
la source
Hmm, pour le réintégrer dans l'historique, ne devez-vous pas simplement l'enregistrer dans un fichier .bat et l'exécuter?
Pacerier
1
@Pacerier exécuter à nouveau les commandes les inclurait sûrement dans l'historique, mais cela aurait probablement des effets secondaires importants. Imaginez que vous supprimiez certains fichiers à travers le shell, puis que vous les recréiez hors du shell à travers un processus long et pénible. Le rechargement de l’historique via votre procédure effacerait à nouveau les fichiers de manière inattendue.
lundi
@ Pacerier, vous réalisez que "lancez-le" signifie que vous exécutez toutes ces commandes, n'est-ce pas? Il ne s'agit pas simplement de les charger dans l'histoire, mais de les laisser avoir des effets sur votre système.
ADTC
1

Historique des commandes: pour activer un historique des commandes (accessible via les touches fléchées haut et bas), exécutez simplement doskey à l'invite de commande. Par exemple, pour créer un historique de commandes de 100 éléments:

doskey /listsize=100

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

Moataz AL Dawood
la source
3
Cela ne répond pas à la question du tout ??
Chopper3
1
Ne fonctionne pas sous Windows 10.
TranslucentCloud
1

clink is nice et l'auteur publie un paquet chocolaté à chaque sortie, mais je suggérerais DeepBlueCLI.

Vous pouvez utiliser https://github.com/sans-blue-team/DeepBlueCLI pour configurer l'ID de sécurité Windows 4688.

Pour PowerShell, DeepBlueCLI utilise également la consignation de module (événement PowerShell 4013) et la consignation de bloc de script (4104). Il n'utilise pas de transcription.

L'avantage supplémentaire est qu'il enregistre le hachage de l'exécutable en ligne de commande dans le journal des événements AppLocker. Source: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing

De plus, comme cette solution utilise l'infrastructure du journal des événements Windows, vous pouvez l'interroger via WMI ou PowerShell Get-EventLog. Avec clink, vous devez apprendre un autre outil afin de détecter des modèles de comportement à l'échelle du système ou du réseau.

John Zabroski
la source
1
L'événement 4688 est la clé, et c'est le magasin central avec lequel Windows enregistre toutes les commandes exécutées. tous les autres outils lisent juste à la recherche de cet événement. Merci. Mais par défaut, il n'est pas activé: itprotoday.com/strategy/…
Peter Teoh