Автоматично експортувати історію в кінці сеансу оболонки


5

Я можу експортувати свою історію Powershell за допомогою скриптів, викладених на сторінці Technet на цю тему ,

Get-History | Export-Clixml ~\PowerShell\history.xml

і я можу автоматично завантажувати збережену історію, коли запускаю сеанс Powershell, використовуючи цей рядок у своєму профілі повноважень,

Import-Clixml ~\PowerShell\history.xml | Add-History

Але чи є спосіб, коли мою історію можна автоматично зберігати, коли я виходжу з сесії? Я використовую ConEmu як свою консоль.

Відповіді:


1

Ось альтернативний підхід, який зберігає вашу історію, не використовуючи інший ярлик PowerShell.

Взято з https://software.intel.com/en-us/blogs/2014/06/17/giving-powershell-a-persistent-history-of-commands

Відкрийте PowerShell в режимі адміністратора і дізнайтеся, яку версію PowerShell у вас є, запустивши наступну команду:

$PSVersionTable.PSVersion

Вам потрібна версія, що перевищує 3, для запуску цієї програми. Якщо у вас є старіша версія, оновіть її.

Дозвольте PowerShell імпортувати або використовувати скрипти, включаючи модулі, виконавши таку команду:

set-executionpolicy remotesigned

Встановіть PsGet та встановіть потрібні вам модулі, виконавши наступні команди:

(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex
import-module PsGet
install-module PsUrl
install-module PSReadline

Створіть наступний сценарій

$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

Збережіть файл як C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1, де його слід замінити правильним ім'ям папки на вашому ПК. Не забудьте змінити параметр «зберегти як тип» для всіх файлів.

Закрийте PowerShell та відкрийте його знову, щоб він почав використовувати сценарій, який ми зберегли.

Відтепер,

get-history

Вилучите останні кілька сотень команд, які ви ввели, і ви можете прокручувати між ними клавіші зі стрілками.


1
Зовнішні посилання можуть розірватися або бути недоступними, і тоді ваша відповідь не буде корисною. Будь ласка, включіть важливу інформацію у свою відповідь та використовуйте посилання для атрибуції та подальшого читання. Дякую.
fixer1234

У мене немає часу, але я думав, що це все одно може бути корисним для когось. Я позначив це як вікі спільноти, тому йди.
Рорі

Тоді просто розмістіть посилання як коментарі. Не залишайте це для вдосконалення інших, якщо у вас немає часу приділяти цьому увагу.
Джамала

1
Перефразований, наскільки я можу, і оновлений як окрема відповідь. Взяв мене 5 хвилин за сніданком. Було б добре, якби фолк обидва виправили свої відповіді і допомогли, де це можливо, у мене були відповіді, які були надзвичайно вдосконалені іншими, і тому ми маємо права на редагування, ні?
Подорожник Geek

Це фактично спрацювало. Я не впевнений, для чого цей install-module PsUrlкрок, він не вдався на моїй машині, але сценарій все одно працює. Він використовує PSReadline, але, схоже, не використовує PsUrl
stib

4

Ще один спосіб зробити це, на всякий випадок, коли це комусь корисно.

Тепер Powershell автоматично зберігає історію команд у файлі "% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt"

Щоб відобразити історію, я додав функцію у свій профіль так ...

function h2 {
    $h = [System.Environment]::ExpandEnvironmentVariables("%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt")
    cat $h;
}

Тепер я можу просто набрати "h2" для відображення повної історії. Не особливо розумні, але ефективні.


3

Не ідеально, але ви можете використовувати ярлик із командою запуску, яка повідомляє PowerShell, щоб зберегти всю історію на виході.

  1. Клацніть правою кнопкою миші робочий стіл і виберіть команду Створити -> Ярлик
  2. Введіть наступне як шлях ярлика:
powershell -NoExit -Command $ histlog = Реєстрація-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent] :: Вихід) -Action {Get-History | Export-Clixml ~ \ PowerShell \ history.xml}
  1. Виберіть ім'я ярлика та натисніть кнопку ОК .

Якщо запустити цей ярлик, ваша історія буде збережена у ~ \ PowerShell \ history.xml, коли PowerShell отримує подію виходу.


Чудово! Дякую. Якщо ви не хочете використовувати консоль конфігурації за замовчуванням за замовчуванням (скажімо, ви хочете використовувати ConEmu), ви можете додати це до завдань за замовчуванням, які виконуються під час запуску нової консолі.
стиб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.