Jak získat historii příkazů PowerShell ve Windows 10

V prostředí Windows 10 nabízí PowerShell možnost sledovat historii příkazů aktuální relace, nicméně pro mnohé uživatele je to nedostatečné. Často potřebují mít přehled o příkazech zadaných napříč různými relacemi. Pokud vám tedy historie aktuální relace nestačí, existuje řešení v podobě skriptu a logovacího souboru, které vám v tomto ohledu mohou pomoci.

Historie příkazů v aktuální relaci

Pokud používáte PowerShell ve verzi 5 a vyšší, můžete získat přehled o příkazech provedených v aktuální relaci pomocí následujícího příkazu:

Get-History

Standardně si PowerShell pamatuje posledních 50 příkazů, ale toto omezení je možné změnit. Stačí otevřít PowerShell, kliknout pravým tlačítkem myši na záhlaví okna a z kontextového menu vybrat „Vlastnosti“. V nově otevřeném okně přejděte na záložku „Možnosti“. Zde uvidíte sekci „Historie příkazů“, kde je nastavena výchozí hodnota 50. Změňte tuto hodnotu na vyšší číslo, pokud si přejete ukládat více příkazů.

Protokol historie PowerShell

Pro přístup k protokolu historie je nejdříve potřeba instalovat modul PSReadLine pomocí následujícího příkazu:

Install-Module PSReadLine

Následně po spuštění následujícího příkazu získáte cestu k souboru, který obsahuje kompletní historii všech příkazů, které byly v PowerShellu spuštěny.

(Get-PSReadlineOption).HistorySavePath

Historie příkazů PowerShell napříč relacemi

Pro zprovoznění historie napříč relacemi je potřeba projít následujícím postupem, který se může zdát poněkud zdlouhavý, ale výsledek stojí za to. Toto řešení původně pochází z webu Intel. Nejdříve zkontrolujte, zda se v následujícím umístění nachází soubor s názvem Microsoft.PowerShell_profile.ps1.

C:Users<uživatelské_jméno>DocumentsWindowsPowerShell

Pokud tam tento soubor nenajdete, otevřete PowerShell a zadejte příkaz. Tím se otevře váš profilový soubor v Poznámkovém bloku. Pokud tento soubor ještě neexistuje, PowerShell vám to oznámí a zeptá se, zda jej chcete vytvořit. Potvrďte vytvoření souboru.

notepad $Profile

Zavřete prázdný soubor v Poznámkovém bloku. V PowerShellu ověřte pomocí následujícího příkazu, že používáte verzi PowerShell 5 nebo novější:

$PSVersionTable.PSVersion

Nyní nastavte zásadu provádění na hodnotu RemoteSigned:

set-executionpolicy remotesigned

V dalším kroku je potřeba instalovat moduly PsUrl a PSReadline. Pro instalaci můžete použít následující příkaz. Pokud dojde k chybě, je nutné provést instalaci manuálně dle instrukcí na odkazovaných stránkách nebo zkusit přidat úložiště jako důvěryhodné a zopakovat příkaz.

install-module PsUrl
install-module PSReadline

Po nainstalování modulů otevřete soubor:

C:Users<uživatelské_jméno>DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1

Vložte do něj následující obsah a uložte ho:

$HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
# if you don't already have this configured...
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

Pro zobrazení historie příkazů můžete použít příkaz Get-History, nicméně je velmi důležité si zapamatovat, že pro správné uložení historie NELZE PowerShell zavírat kliknutím na tlačítko Zavřít. Vždy musíte použít příkaz exit.

Procházet historii příkazů můžete také pomocí kláves se šipkami nahoru a dolů.