加载PowerShell历史记录

时间:2013-07-25 15:39:18

标签: windows powershell

我尝试使用命令

加载我的PowerShell历史记录
Import-Clixml ~\history.clixml | Add-History

在我的$个人资料中。

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

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

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

4 个答案:

答案 0 :(得分:12)

我之前已经研究过了,这是不可能的。使用向上箭头和功能键访问的缓冲区(例如使用 F8 完成,以及当您点击 F7 时看到的列表)是按会话访问的,无法修改。< / p>

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

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

答案 1 :(得分:3)

添加更多细节:

每个PowerShell主机都会略微区别一些。虽然PowerShell本身具有历史缓冲区的概念,但每个环境中的向上/向下箭头都使用自己的内部历史记录,而不是全局历史记录。从理论上讲,没有理由微软无法解决主机中处理历史记录的方式以引起注意(我会直接建议)。不幸的是,这样做会有几年的变化,所以你现在有点困惑。

在历史上遇到了同样的痛苦,我在IsePackV2添加了一个冰柱来直观地探索历史。只需按F7键,侧栏窗格就会显示真实的历史记录缓冲区。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

在PowerShell 3或更高版本中,这可以在PSReadline的帮助下进行,您可以阅读here

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