Windows 加载PowerShell历史记录

Windows 加载PowerShell历史记录,windows,powershell,Windows,Powershell,我已尝试使用命令加载PowerShell历史记录 Import-Clixml ~\history.clixml | Add-History 在我的$profile中 我还编写了一个保存它们的自定义退出函数: function global:xx { Get-History | Export-Clixml ~\history.clixml exit } 我键入“xx”退出PowerShell,然后重新启动PowerShell。虽然它加载我的history.clixml时没有任何错误,

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

Import-Clixml ~\history.clixml | Add-History
在我的$profile中

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

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

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

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

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


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

添加更多细节:

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


在经历了与历史同样的痛苦之后,我添加了一个冰柱来直观地探索历史。只需按F7,边栏窗格将显示真实的历史缓冲区

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


它不像向上箭头(F7)那样方便,甚至不能调用历史或#get chi。不过,它也不会让我的启动陷入困境,加载的历史记录可能会随着时间的推移而变得相当大。

在PowerShell 3或更高版本中,这可以通过您可以阅读的PSReadline帮助实现

此模块完全满足您的需要-它将您的历史加载到其内部历史记录中,因此上/下箭头可以处理以前会话中的历史记录。

我没有找到“history.clixml”文件,但有一个位置,通过
(Get-PSReadlineOption)获取。HistorySavePath
(例如
C:\Users\giraf\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost\u history.txt
)包含此类信息。请参阅。