5

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

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

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

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

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

3 ответа3

3

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

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

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

3

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

Теперь 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" для отображения полной истории. Не особо умно, но эффективно.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .