【问题标题】:PowerShell track history as full objects across sessionsPowerShell 将历史记录作为跨会话的完整对象进行跟踪
【发布时间】:2020-11-03 00:49:16
【问题描述】:

我是 Win 10 下使用 PowerShell 5.1 的新手。 我在修补历史。到目前为止,我设法在与PSReadline 的会话中保持了持久的历史记录。 *

但这是一个“有限”的持久历史记录,因为只有命令保存在文本文件中,在启动新会话时会读取该文件。所以很多关于HistoryInfo 对象的信息都丢失了,尤其是StartExecutionTime。 那么,

  1. Get-Content (Get-PSReadlineOption).HistorySavePath 给出所有没有“时间戳”的命令,并且
  2. Get-History 提供带有时间戳的命令,但仅适用于当前会话。

我习惯了history in bash,这两个点都对。

This old doc (2009) 显示了一种可能的解决方法。 在与Get-History | Export-Clixml $env:PSDIR'\my_history.xml' 离开会话之前,我设法导出了所有历史信息。 在新会话开始时执行 Import-Clixml $env:PSDIR'\my_history.xml' | Add-History 会恢复完整的历史记录,包括时间戳。

我猜缺少的是:

  1. 一种在关闭会话时自动导出历史记录的方法。 我什至不知道这是否可能。

  2. 导入后删除历史记录的第一行,因为它包含导入命令本身。我没有做这个,但我想我可以处理它。 并不需要。如果导入命令在启动脚本中执行,它不会进入历史记录。

这是实现预期结果的可行方法吗? 如果是这样,我怎么能化身第 1 项?

还有其他选择吗?


* 虽然I could not make it work in the PS ISE.

【问题讨论】:

标签: powershell psreadline command-history


【解决方案1】:

感谢the pointer by 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”使这项工作。* 在这种情况下,我观​​察到了一个奇怪的结果。如果我用“X”关闭会话#1,并打开一个新会话#2,我在会话#1 中输入的命令不会显示在Get-History 的底部。 不过,它们可与向上/向下箭头一起使用。 这可能值得另一个问题。


* 根据this,从 PS v3 开始,“X”按钮与退出事件相关联。但鉴于上面的第 2 点,“X”似乎与exit 的工作方式不完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多