Автоматический экспорт журнала в конце сеанса powershell

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

Get-History | Export-Clixml ~PowerShellhistory.xml

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

Import-Clixml ~PowerShellhistory.xml | Add-History

это здорово, но это должно произойти автоматически.

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

27
задан stib
03.05.2023 12:13 Количество просмотров материала 3608
Распечатать страницу

3 ответа

вот альтернативный подход, который сохраняет историю без использования другого ярлыка 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
отвечен Journeyman Geek 2023-05-04 20:01

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

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

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

3
отвечен 2023-05-04 22:18

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

PowerShell теперь автоматически сохраняет журнал команд в файл "%профиль_пользователя%\AppData\роуминг\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", чтобы отобразить полную историю. Не особо умно, но эффективно.

2
отвечен user1751825 2023-05-05 00:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх