Historie příkazů v relaci PowerShell

Windows PowerShell zpočátku (stejně jako příkazový řádek cmd) ukládá historii provedených příkazů pouze v aktuální relaci PowerShell, když zavřete okno konzoly PowerShell nebo restartujete počítač, historie zadaných příkazů PowerShell se nikde neuloží. Ve srovnání s bash, to je významný nedostatek. V PowerShell v5 představeném ve Windows 10 byla tato chyba odstraněna.

Obsah:

  • Historie příkazů v PowerShell 5.0, PSReadLine Module
  • Vymazání historie příkazů v prostředí PowerShell
  • Importujte historii příkazů PowerShell do jiné relace

Historie příkazů v PowerShell 5.0, PSReadLine Module

Předpokládejme, že zadáte a provedete nějaký složitý příkaz PowerShell. Ve Windows 10 a Windows Server 2016 můžete i po restartování počítače otevřít novou relaci PowerShell a stisknout klávesu se šipkou nahoru. Na obrazovce by se měl zobrazit poslední zadaný příkaz. Pokud budete pokračovat v stisknutí klávesy nahoru, uvidíte všechny dříve provedené příkazy. Pomocí kláves nahoru a dolů můžete procházet historii příkazů a znovu provádět dříve zadané příkazy.

V dřívějších verzích PowerShell nebyla historie příkazů v aktuální relaci uložena po jejím uzavření. Pomocí kláves nahoru / dolů můžete procházet historii příkazů v aktuální relaci nebo je zobrazit všechny najednou pomocí rutiny cmdlet Jdi-Historie.

Můžete zobrazit podrobnější informace o dříve provedených příkazech, včetně stavu a času zahájení / ukončení příkazu:
Get-History | Seznam formátů - Vlastnost *

PowerShell ve Windows 10 si ve výchozím nastavení pamatuje posledních 4096 příkazů, které jsou uloženy v textovém souboru umístěném v profilu každého uživatele

% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt

. Historie se udržuje samostatně pro konzolu PowerShell, zvlášť pro ISE.

Spuštěný příkaz PowerShell se dostane do historie až po jeho dokončení. Pokud provedení příkazu PoSh trvá dlouho, uvidíte jej v historii příkazů až po jeho dokončení..

V případě, že nechcete procházet celou historii příkazů PowerShell, můžete prohledat historii příkazů pomocí klávesové zkratky CTRL+R (zpětné vyhledávání) a CTRL+S (hledat vpřed). Stiskněte kombinaci kláves a začněte psát část příkazu, kterou chcete najít v dříve provedených příkazech. Historie příkazů vyhledá zadaný text na libovolné pozici (na rozdíl od vyhledávání v konzole PowerShell pomocí kláves F8 nebo Shift + F8, které vyhledávají shody pouze od začátku řádku) a příslušná možnost je zvýrazněna..

Poznámka:. Funkce protokolování příkazů v PowerShell 5 není zabudována do samotného Windows Management Framework, ale je založena na modulu jiného výrobce PSReadLine, výrazně rozšiřuje funkčnost konzoly PowerShell. V systému Windows 10 je v adresáři C: \ Program Soubory\ WindowsPowerShell\ Moduly\ PSReadline a je automaticky importován při spuštění konzoly PowerShell. PSReadLine poskytuje zvýraznění syntaxe v konzole, je zodpovědný za schopnost používat výběr textu pomocí myši a kopírovat / vložit pomocí CTRL + C a CTRL + V. PSReadLine není součástí samostatně nainstalovaného PowerShell 5 pro předchozí verze Windows. Pokud tedy chcete používat funkci pro udržování historie provedených příkazů PowerShell v předchozích verzích OS (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2), kromě instalace Windows Management Framework 5.1, budete muset nainstalovat modul PSReadLine pomocí správce balíčků PackageManagement (dříve OneGet) z online úložiště s příkazem:

Instalační modul PSReadLine

Pomocí příkazu lze zobrazit úplný seznam funkcí modulu PSReadLine pro správu historie provádění příkazů v PowerShell a připojených klíčů:

Get-PSReadlineKeyHandler | ? $ _. funkce '* hist *'

Popis klíčových funkcí
---       --------             -----------
Popis klíčových funkcí
---       --------                -----------
Nahoru PředchozíHistorie Nahrazení zadaných dat předchozí položkou protokolu
DownArrow NextHistory Nahraďte své záznamy další položkou protokolu
Ctrl + R ReverseSearchHistory Provádí interaktivní vyhledávání protokolu v opačném pořadí
Ctrl + S ForwardSearchHistory Proveďte interaktivní logování ve směru vpřed
Alt + F7 ClearHistory Odstranění všech položek z protokolu příkazového řádku (nikoli z protokolu PowerShell)
F8 HistorySearchBackward Vyhledá předchozí položku protokolu, která začíná aktuálním vstupem, například P ...
Shift + F8 HistorySearchForward Vyhledá další položku protokolu, která začíná aktuálním vstupem, například Ne ...
Unbound ViSearchHistoryBackward Zahájí nové vyhledávání protokolu zpět.
Unbound BeginningOfHistory Přejít na první položku protokolu
Bez závazků EndOfHistory Přejít na poslední položku (aktuální vstup) v protokolu

Historie příkazů se konfiguruje pomocí cmdletů Jdi-PSReadlineOption a Set-PSReadlineOption. Aktuální nastavení lze získat pomocí tohoto návrhu:

Get-PSReadlineOption | vyberte HistoryNoDuplikáty, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Mohlo by nás zajímat nastavení následujících parametrů:

  • HistoryNoDuplicates - Musím zachovat stejné příkazy v historii PowerShell?
  • MaximumHistoryCount - maximální počet uložených příkazů (ve výchozím nastavení je uloženo 4096 příkazů);
  • HistorySearchCursorMovesToEnd - zda jít při hledání na konec příkazu;
  • HistorySearchCaseSensitive - zda při vyhledávání musí být velká a malá písmena;
  • HistorySavePath - cesta k textovému souboru, do kterého je uložena historie příkazů PowerShell;
  • HistorySaveStyle - funkce ukládání příkazů:
    • SaveIncrementally - příkazy se ukládají během provádění (ve výchozím nastavení)
    • SaveAtExit - uložení historie při zavření konzoly
    • SaveNothing - zakáže historii příkazů

Nastavení modulu PSReadLine můžete změnit příkazem Set-PSReadlineOption, například:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

Schopnost uložit historii provedených příkazů v PowerShell 5.0 je tedy dalším argumentem pro opuštění cmd ve prospěch konzole PoSh..

Vymazání historie příkazů v prostředí PowerShell

Jak jsme popsali výše, modul PSReadline ukládá všechny příkazy konzoly PowerShell do textového souboru. V některých případech však správce musí do konzoly PowerShell zadat různé důvěrné informace (pověření, hesla, adresy, osobní údaje atd.). Jiný správce serveru nebo útočník tak může přistupovat k datům v textovém souboru. Z bezpečnostních důvodů bude pravděpodobně nutné vymazat protokol příkazů PowerShell nebo zcela zakázat historii příkazů.

Cmdlet Jasná historie nelze použít k vymazání historie příkazů, protože vymaže pouze seznam předchozích příkazů, které se zobrazí rutina Get-History.

Chcete-li odstranit historii předchozích příkazů PoSh, musíte odstranit soubor, do kterého jsou uloženy. Nejjednodušší způsob, jak toho dosáhnout, je pomocí příkazu:

Odebrat položku (Get-PSReadlineOption) .HistorySavePath

Poté ukončete relaci PoSh:

Pokud chcete úplně zakázat ukládání historie příkazů PoSh do textového souboru, spusťte příkaz:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Importujte historii příkazů PowerShell do jiné relace

V některých případech je vhodné mít po ruce jeden nebo stejný seznam často používaných příkazů PowerShell na různých počítačích. Můžete exportovat aktuální historii příkazů do souboru xml a importovat je do jiných počítačů. To lze provést zkopírováním souboru ConsoleHost_history.txt do uživatelských profilů na potřebných počítačích..

K exportu příkazů z aktuální relace do souboru můžete také použít cmdlet Export-Clixml.

Get-History | Export-Clixml-Cesta c: \ ps \ příkazy_hist.xml

Import příkazů ze souboru do relace PoSh:

Add-History --InputObject (Import-Clixml -Path c: \ ps \ orders_hist.xml)

Chcete-li automaticky importovat příkazy do souboru na konci relace PoSh, můžete skript spojit s událostí ukončení PoSh relace (!! Relace musí skončit příkazem exit a ne pouze zavřít okno PoSh):

$ HistFile = Připojte se k cestě ([Prostředí] :: GetFolderPath ('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action Get-History | Export-Clixml $ HistFile | nulový
if (Test-path $ HistFile) Import-Clixml $ HistFile | Add-History