История на командите в PowerShell сесия

Първоначално Windows PowerShell (като командния ред cmd) записва историята на изпълнените команди само в текущата сесия на PowerShell, когато затворите прозореца на конзолата PowerShell или рестартирате компютъра, историята на PowerShell командите, които сте въвели, не се записва никъде. В сравнение с bash, това е съществен недостатък. В PowerShell v5, въведена в Windows 10, този недостатък беше отстранен.

Съдържание:

  • История на командите в PowerShell 5.0, PSReadLine модул
  • Изчистване на историята на командите в PowerShell
  • Импортирайте историята на командите PowerShell в друга сесия

История на командите в PowerShell 5.0, PSReadLine модул

Да предположим, че пишете и изпълнявате някаква сложна команда PowerShell. В Windows 10 и Windows Server 2016, дори след като рестартирате компютъра, можете да отворите нова сесия PowerShell и да натиснете клавиша със стрелка нагоре. Последната въведена команда трябва да се покаже на екрана. Ако продължите да натискате клавиша нагоре, ще видите всички команди, изпълнени по-рано. По този начин, използвайки клавишите нагоре и надолу, можете да превъртите през историята на командите и да изпълните отново командите, въведени по-рано..

В по-ранните версии на PowerShell историята на командите в текущата сесия не беше запазена, след като се затвори. С помощта на бутоните за нагоре / надолу можете да превъртате през историята на командите в текущата сесия или да ги показвате наведнъж, като използвате командлета получавам-история.

Можете да покажете по-подробна информация за по-рано изпълнени команди, включително състоянието и времето за начало / край на командата:
Get-History | Format-List -Property *

PowerShell в Windows 10 по подразбиране помни последните 4096 команди, които се съхраняват в текстов файл, разположен в потребителския профил на всеки потребител

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

. Историята се поддържа отделно за конзолата PowerShell, отделно за ISE.

Изпълняващата се команда PowerShell влиза в историята само след нейното приключване. Ако командата на PoSh отнема много време за изпълнение, ще я видите в историята на командите само когато е завършена..

В случай, че не искате да превъртите през цялата история на командите PowerShell, можете да търсите в историята на командите, като използвате клавишната комбинация CTRL+R (обратно търсене) и CTRL+S (търсене напред). Натиснете комбинацията от клавиши и започнете да пишете частта от командата, която искате да намерите в предварително изпълнени команди. Историята на командите ще търси въведения текст на всяка позиция (за разлика от търсенето в конзолата PowerShell от F8 или Shift + F8, които търсят съвпадения само от началото на реда) и подходящата опция е подчертана.

забележка. Функционалността за регистриране на команди в PowerShell 5 не е вградена в самата рамка за управление на Windows, а се основава на модул на трета страна PSReadLine, значително разширява функционалността на конзолата PowerShell. В Windows 10 е в директорията C: \ Програма файлове\ WindowsPowerShell\ Модули\ PSReadline и се импортира автоматично, когато стартира конзолата PowerShell. PSReadLine осигурява подчертаване на синтаксиса в конзолата, отговаря за възможността да се използва селекцията на текст с мишката и да се копира / постави с помощта на CTRL + C и CTRL + V. PSReadLine не е част от отделно инсталирания PowerShell 5 за предишни версии на Windows. По този начин, ако искате да използвате функцията за регистриране на захранването на изпълнени команди PowerShell в предишни версии на ОС (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) в допълнение към инсталирането на Windows Management Framework 5.1, ще трябва да инсталирате модула PSReadLine с помощта на мениджъра на пакети PackageManagement (по-рано OneGet) от онлайн хранилището с командата:

Инсталирайте модул PSReadLine

Пълен списък на модулите PSReadLine за управление на историята на изпълнението на командите в PowerShell и прикачените към тях ключове може да бъде показан с командата:

Get-PSReadlineKeyHandler | ? $ _. функция -подобен '* hist *'

Описание на основните функции
---       --------             -----------
Описание на основните функции
---       --------                -----------
UpArrow PreviousHistory Заменете въведените данни с предишен лог елемент
DownArrow NextHistory Заменете своите записи със следващия запис в дневника
Ctrl + R ReverseSearchHistory Извършете интерактивно търсене в журнала обратно
Ctrl + S ForwardSearchHistory Извършете търсене на интерактивен журнал в посока напред
Alt + F7 ClearHistory Изтрийте всички елементи от дневника на командния ред (не от дневника на PowerShell)
F8 HistorySearchBackward Търсене на предишния лог елемент, който започва с текущия вход, например P ...
Shift + F8 HistorySearchForward Търсене на следващия лог елемент, който започва с текущия вход, например Ne ...
Unbound ViSearchHistoryBackward Стартира ново търсене в дневника назад.
Несвързано началоOfHistory Отидете на първия елемент от журнала
Unbound EndOfHistory Отидете на последния елемент (текущ вход) в дневника

Историята на командите се конфигурира с помощта на командлети получавам-PSReadlineOption и комплект-PSReadlineOption. Текущите настройки могат да бъдат получени с помощта на този дизайн:

Get-PSReadlineOption | изберете HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Може да ни заинтересуват настройките за следните параметри:

  • HistoryNoDuplicates - Трябва ли да запазвам същите команди в историята на PowerShell?
  • MaximumHistoryCount - максимален брой запазени команди (4096 команди са запазени по подразбиране);
  • HistorySearchCursorMovesToEnd - дали да отидете до края на командата при търсене;
  • HistorySearchCaseSensitive - дали да се вписва в регистър при извършване на търсене;
  • HistorySavePath - път към текстов файл, в който е записана историята на PowerShell команди;
  • HistorySaveStyle - функции за запазване на команди:
    • SaveIncrementally - команди се записват по време на изпълнение (по подразбиране)
    • SaveAtExit - запазване на историята при затваряне на конзолата
    • SaveNothing - деактивира историята на командите

Можете да промените настройките на модула PSReadLine с помощта на командата Set-PSReadlineOption, например:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

По този начин, възможността за запазване на историята на изпълнените команди в PowerShell 5.0 е друг аргумент за изоставяне на cmd в полза на PoSh конзолата..

Изчистване на историята на командите в PowerShell

Както описахме по-горе, модулът PSReadline записва всички команди от конзолата PowerShell в текстов файл. В някои случаи обаче администраторът може да трябва да въведе различна поверителна информация (идентификационни данни, пароли, адреси, лични данни и т.н.) в конзолата PowerShell. По този начин друг администратор или нападател на сървър може да получи достъп до данните в текстов файл. От съображения за сигурност може да се наложи да изчистите дневника на командите PowerShell или напълно да деактивирате историята на командите.

кратката команда Изчистване на историята не може да се използва за изчистване на историята на командите, защото той изчиства само списъка с предишни команди, които се показва на командлета Get-History.

За да изтриете историята на предишните PoSh команди, трябва да изтриете файла, в който са записани. Най-лесният начин да направите това е с командата:

Премахване на елемент (Get-PSReadlineOption) .HistorySavePath

След това затворете сесията на PoSh:

Ако искате напълно да деактивирате запазването на историята на PoSh команди в текстов файл, изпълнете командата:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Импортирайте историята на командите PowerShell в друга сесия

В някои случаи е удобно да имате под ръка един или един и същ списък с често използвани команди PowerShell на различни компютри. Можете да експортирате текущата история на командите в xml файл и да ги импортирате на други компютри. Това може да стане чрез копиране на файла ConsoleHost_history.txt в потребителски профили на необходимите компютри..

Можете също да използвате командлета Export-Clixml, за да експортирате команди от текущата сесия във файл:

Get-History | Export-Clixml -Path c: \ ps \ commandds_hist.xml

За да импортирате команди от файл в PoSh сесия:

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

За да импортирате автоматично команди в файл в края на PoSh сесия, можете да свържете скрипта към събитието за приключване на сесията PoSh (!! Сесията трябва да завърши с командата за изход, а не просто да затвори прозореца на PoSh):

$ HistFile = Join-Path ([Околна среда] :: GetFolderPath ('UserProfile')) .ps_history
Регистрация-EngineEvent PowerShell.Exiting -Action Get-History | Export-Clixml $ HistFile | извън нула
ако (Test-path $ HistFile) Import-Clixml $ HistFile | Add-история