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:
该问题特定于用户配置文件。在新的用户配置文件中,历史记录工作正常。标准检查使用sfc
,dism
并chkdsk
没有产生任何结果。
正如我的问题所述,作为我目前
Import-Module PSReadLine
在我的个人资料文件中使用的一种解决方法,我通过notepad $PROFILE
. 由于问题仅存在于我的个人资料中,因此这对我的用户有用,而不会影响任何其他用户。虽然这不能解决问题 - 现在它解决了我当前的所有问题。