【问题标题】:Loading PowerShell history加载 PowerShell 历史记录
【发布时间】:2013-07-25 14:49:20
【问题描述】:

我尝试使用命令加载我的 PowerShell 历史记录

Import-Clixml ~\history.clixml | Add-History

在我的 $profile 中。

我还编写了一个自定义退出函数来保存它们:

function global:xx 
{
  Get-History | Export-Clixml ~\history.clixml
  exit
}

我键入“xx”退出 PowerShell,然后重新启动 PowerShell。虽然它加载我的history.clixml 没有任何错误,但当我单击向上箭头键时,我没有看到任何命令显示。这个键通常可以让我从我的命令历史中访问我以前的命令。

【问题讨论】:

标签: windows powershell


【解决方案1】:

我以前研究过这个,但这是不可能的。使用向上箭头和功能键访问的缓冲区(例如使用 F8 完成以及按 F7 时看到的列表)是按会话进行的,无法修改。

但是,要快速访问历史记录中的命令,包括使用 Add-History 添加的命令,您可以键入 # 后跟一个模式,然后点击 [TAB] 循环浏览历史记录中与模式匹配的所有命令。例如,#dsquery[TAB] 将扩展为历史中包含“dsquery”的最新命令,再按 [TAB] 次将向后循环通过包含“dsquery”的任何其他命令。

模式的匹配方式由 TabExpansion 函数决定。默认情况下,制表符扩展历史条目最适用于命令中的字母字符串,没有符号或空格。您可以通过输入$function:TabExpansion 来检查函数的代码。如果需要,您可以通过定义自己的 TabExpansion 函数来修改选项卡扩展的行为。但是,除非您真的确定自己知道自己在做什么,否则我建议您调整现有代码而不是从头开始,因为您可能会破坏其他功能,因为 TabExpansion 函数会影响所有提示符下的制表符补全,例如制表符补全命令或路径。

【讨论】:

    【解决方案2】:

    添加更多细节:

    每个 PowerShell 主机的一些操作都略有不同。虽然 PowerShell 本身有一个历史缓冲区的概念,但每个环境中的向上/向下箭头使用它们自己的内部历史,而不是全局历史。从理论上讲,微软没有理由不修复主机中处理历史的方式来关注它(我会直接建议)。不幸的是,要做到这一点的更改需要几年时间,所以你现在有点卡住了。

    面对同样的历史痛苦,我在IsePackV2 中添加了一个冰柱,以直观地探索历史。只需按 F7,侧边栏窗格就会显示真实的历史缓冲区。

    【讨论】:

      【解决方案3】:

      在过去,我只是将每个会话的历史记录保存到一个唯一命名的历史文件中。然后我创建了一个配置文件函数,它采用一个模式,然后在所有这些历史文件中搜索匹配并打印出来的命令行。

      它不如向上箭头 (F7) 甚至 Invoke-History 或 #get-chi 方便。然而,它也不会让我的创业公司陷入困境,加载的历史记录会随着时间的推移而变得相当大。

      【讨论】:

        【解决方案4】:

        在 PowerShell 3 或更高版本中,这可以在 PSReadline 的帮助下实现,您可以阅读有关 here 的信息。

        此模块完全符合您的要求 - 它将您的历史记录加载到其内部历史记录中,因此向上/向下箭头与以前会话的历史记录一起使用。

        【讨论】:

          猜你喜欢
          • 2013-08-17
          • 2013-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-23
          • 2023-04-06
          相关资源
          最近更新 更多