Powershell 历史记录不再持久

Powershell 历史记录不再持久

Powershell 停止使用其持久历史记录(Windows 11)。当我启动新的 Powershell 实例时,以前的会话中的命令不会显示。一旦我第一次在新会话中使用命令,就可以通过 F8/箭头等调用它们。

我目前检查/发现的情况:

  • 检查历史文件时,C:\Users\[username]\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt我注意到命令不再保存在那里。

  • 一旦我输入命令(Get-PSReadLineOption).HistorySavePath(返回我在上一个要点中提到的路径),一切都会恢复正常。已保存在那里的命令可以通过 F8 等再次访问,新命令也会再次保存到历史文件中。

  • 使用powershell -noexit Set-PSReadlineOption -HistorySavePath "C:\Users\admin\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt"脚本启动 powershell 也同样有效。

我还没有弄清楚为什么 Powershell 不再默认使用历史文件。我记得它以前还可以用,但我不知道为什么它停止工作了。但从历史文件的内容来看,这已经是很久以前的事了。

知道如何让它再次工作吗没有每次启动时都必须应用的解决方法(例如手动输入“历史记录保存命令”或使用“参数来启动它”)?

补充1:

这些命令给出以下输出(注意:使用其中任何一个之后,历史记录都可以再次正常工作,命令会保存到历史记录中,除了第一个已使用并“重新激活”历史记录的命令外,可以调用完整的命令)

PS C:\> (Get-PSReadlineOption).HistorySaveStyle
SaveIncrementally
PS C:\> (Get-PSReadlineOption).HistoryNoDuplicates
True
PS C:\> (Get-PSReadlineOption).MaximumHistoryCount
4096

补充2:

$PROFILE给出以下输出(该命令不会影响历史记录的行为)。注意:列出的文件不存在于指示的目录中:

PS C:\> $PROFILE | Get-Member -Type NoteProperty


   TypeName: System.String

Name                   MemberType   Definition
----                   ----------   ----------
AllUsersAllHosts       NoteProperty string AllUsersAllHosts=C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    NoteProperty string AllUsersCurrentHost=C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    NoteProperty string CurrentUserAllHosts=C:\Users\username\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost NoteProperty string CurrentUserCurrentHost=C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

补充 3 - 包括一个解决方法:

似乎 PSReadLine 模块未加载。使用Import-Module PSReadLine可使历史记录正常工作。作为一种解决方法,我将命令放入 PS 配置文件中,这样它就会自动执行修复了问题,但没有解决根本原因。这可能也是为什么一旦使用与模数相关的命令,历史记录就会开始起作用的原因,我假设 PowerShell 会自行加载该模块。

补充4:

该问题特定于用户配置文件。在新的用户配置文件中,历史记录工作正常。使用 和 进行的标准检查sfcdism产生chkdsk任何结果。

答案1

正如我的问题中所述,作为一种解决方法,我目前Import-Module PSReadLine在我的配置文件中使用,我通过 访问该文件notepad $PROFILE。由于问题仅存在于我的个人资料中,因此这对我的用户有效,而不会影响任何其他用户。

虽然这不能解决问题 - 但目前它解决了我当前的所有问题。

答案2

您是否尝试过禁用屏幕阅读器模式?

设置 ItemProperty 'registry::HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access' 开启 0 https://stackoverflow.com/a/66749811/4191109

相关内容