Автоматически экспортировать историю в конце сеанса PowerShell

Я могу экспортировать историю Powershell, используя сценарии, описанные на странице Technet по этому вопросу ,

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

И я могу автоматически загружать сохраненную историю, когда я запускаю сеанс Powershell, используя эту строку в моем профиле powershell,

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

Что отлично – почти как с использованием правильной оболочки.

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

Вот альтернативный подход, который сохраняется в вашей истории без использования другого ярлыка 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 

Извлечет последние несколько сотен команд, которые вы ввели, и вы можете прокручивать их с помощью клавиш со стрелками.

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

  1. Щелкните правой кнопкой мыши рабочий стол и выберите « Создать» -> « Ярлык»
  2. Введите следующий путь:
 Powershell -NoExit -Command $ histlog = Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent] :: Выход) -Action {Get-History |  Export-Clixml ~ \ PowerShell \ history.xml}
  1. Выберите имя для своего ярлыка и нажмите « ОК» .

Если вы запустите этот ярлык, ваша история будет сохранена в ~ \ PowerShell \ history.xml всякий раз, когда PowerShell получит событие выхода.

Другой способ сделать это, на всякий случай, это полезно для всех.

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», чтобы отобразить полную историю. Не особенно умный, но эффективный.

  • В чем разница между .replace и -replace в powershell?
  • Печать символов Unicode в приглашении PowerShell
  • Как получить только каталоги с помощью Get-ChildItem?
  • Поиск текста на веб-страницах с указанием списка URL-адресов
  • Передача строки в параметре фильтра Get-ADUser вызывает ошибку - свойство не найдено в pscustomobject
  • Как искать строку в нескольких файлах и возвращать имена файлов в Powershell?
  • PowerShell: запуск команды в качестве администратора
  • Модуль выгрузки Powershell ... полностью
  • Как сделать захват экрана в Windows PowerShell?
  • Рекурсивный поиск файлов с использованием PowerShell
  • Как передать несколько параметров в функцию в PowerShell?
  • Interesting Posts

    Как я могу рассматривать предупреждение MSB3245 (не может разрешить ссылку) как ошибку?

    Как заменить все строки на числа, содержащиеся в каждой строке в Notepad ++?

    Служба зависает в WaitForExit после вызова командного файла

    Как сделать UITableViewCell с UITextView внутри, который динамически регулирует его высоту на основе UITextView?

    Сфера действия против переменной жизни в C

    Что означает «com.developer.application»?

    Есть ли функция R, чтобы избежать строки для символов регулярных выражений

    Нажатие клавиши «Ввод» в заполняемой форме разрывает макет

    Использование Java с Microsoft Visual Studio 2012

    Как вы отслеживаете, какие пакеты были установлены на Ubuntu (Linux)?

    Брандмауэр Android с VpnService

    Postgresql: лучше ли использовать несколько баз данных по 1 схеме или 1 базу данных с несколькими схемами?

    std :: string для float или double

    Plist Array в NSDictionary

    Замена жесткого диска SATA ноутбука на SSD без переустановки

    Давайте будем гением компьютера.