PowerShell отслеживает историю как полные объекты по сеансам - PullRequest
0 голосов
/ 13 июля 2020

Я новичок, использую PowerShell 5.1 под Win 10. Я возился с историей. До сих пор мне удавалось иметь постоянную историю сеансов с PSReadline. *

Но это «ограниченная» постоянная история, поскольку только команды сохраняются в текстовом файле, который читается при запуске нового сеанса. Таким образом, теряется много информации об объектах HistoryInfo , в частности StartExecutionTime . Затем

  1. Get-Content (Get-PSReadlineOption).HistorySavePath дает все команды без «отметки времени», а
  2. Get-History дает команды с отметкой времени, но только для текущего сеанса.

Я привык к history в bash, который правильно понимает обе точки.

Этот старый do c (2009) показывает возможное обходное решение. Мне удалось экспортировать всю информацию истории, прежде чем покинуть сеанс с Get-History | Export-Clixml $env:PSDIR'\my_history.xml'. Выполнение Import-Clixml $env:PSDIR'\my_history.xml' | Add-History в начале нового сеанса восстанавливает полную историю, включая временные метки.

Я полагаю, что не хватает:

  1. Способ автоматического экспортировать историю при закрытии сессии. Я даже не знаю, возможно ли это.

  2. Удаление первой строки в истории после импорта, так как она содержит саму команду импорта. Я не работал над этим, но думаю, я справлюсь. Не требуется. Если команда импорта выполняется в сценариях запуска, она не go в истории.

Является ли это жизнеспособным способом достижения желаемого результата? Если да, то как я могу воплотить пункт 1?

Есть ли альтернативы?


* Хотя я не мог заставить его работать в PS ISE .

1 Ответ

0 голосов
/ 14 июля 2020

Благодаря указателю RetiredGeek , я мог двигаться вперед. Что я сделал:

  1. Добавил Register-EngineEvent PowerShell.Exiting -Action { . $env:PSDIR'\history\save_history.ps1' } в мой profile.ps1.

  2. Создан файл $env:PSDIR'\history\save_history.ps1' содержащий Get-History | Export-Clixml $env:PSDIR'\my_history.xml'

Это почти решение. Остались только две проблемы:

  1. Удаление команды exit, оставшейся последней в истории. Это кажется управляемым.

  2. Сделайте это при закрытии, нажав «X». * В этом случае я наблюдал странный результат. Если я закрою сеанс №1 с помощью «X» и открою новый сеанс №2, команды, которые я ввел в сеансе №1, не появятся в нижней части Get-History. Тем не менее, они доступны со стрелками вверх / вниз. Вероятно, это стоит другого вопроса.


* Согласно это , начиная с PS v3, кнопка «X» была связана с выходное событие. Но «X», похоже, работает не так, как exit, учитывая пункт 2 выше.

...