O Powershell parou de usar seu histórico persistente (Windows 11). Quando inicio uma nova instância do Powershell, os comandos de sessões anteriores não aparecem. Uma vez que eu uso comandos na nova sessão pela primeira vez, eles podem ser recuperados via F8/setas etc.
O que eu verifiquei/descobri até agora:
Verificando o arquivo de histórico
C:\Users\[username]\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
, notei que os comandos não são salvos lá (mais).Depois de inserir o comando
(Get-PSReadLineOption).HistorySavePath
(que retorna o caminho que mencionei no meu marcador anterior), tudo funciona bem novamente. Os comandos já salvos podem ser acessados novamente via F8 etc. e novos comandos também são salvos no arquivo de histórico novamente.Usar
powershell -noexit Set-PSReadlineOption -HistorySavePath "C:\Users\admin\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt"
para iniciar o powershell por meio de um script também funciona.
Não descobri exatamente por que o Powershell não está mais usando o arquivo de histórico por padrão. Pelo que me lembro, costumava funcionar antes e não sei por que parou de funcionar. Mas já faz algum tempo a julgar pelo conteúdo do arquivo de histórico.
Alguma idéia de como posso fazê-lo funcionar novamente sem uma solução alternativa que deve ser aplicada em cada inicialização (como digitar o "comando de salvamento de histórico" manualmente ou usar um "parâmetro para iniciá-lo")?
Adição 1:
Esses comandos fornecem a seguinte saída (nota: depois de usar qualquer um deles, o histórico funciona bem novamente, os comandos são salvos no histórico e o completo pode ser recuperado, exceto o primeiro comando que foi usado e "reativou" o histórico)
PS C:\> (Get-PSReadlineOption).HistorySaveStyle
SaveIncrementally
PS C:\> (Get-PSReadlineOption).HistoryNoDuplicates
True
PS C:\> (Get-PSReadlineOption).MaximumHistoryCount
4096
Adição 2:
$PROFILE
me dá a seguinte saída (o comando não afeta o comportamento do histórico). Nota: os arquivos listados não existem nos diretórios indicados:
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
Adição 3 - incluindo uma solução alternativa:
Parece que o módulo PSReadLine não está carregando. O uso Import-Module PSReadLine
faz com que o histórico funcione corretamente. Como solução alternativa, coloquei o comando no arquivo de perfil PS, para que ele seja executado automaticamente, o que corrige o problema, mas não a causa . Esta é provavelmente também a razão pela qual o histórico começa a funcionar quando um comando relacionado ao módulo é usado, suponho que o PowerShell carregue o módulo sozinho.
Adição 4:
O problema é específico do perfil do usuário. Em um novo perfil de usuário, o histórico funciona bem. Verificações padrão usando sfc
e dism
não chkdsk
produziu nenhum resultado.
Conforme observado na minha pergunta, como solução alternativa, uso atualmente
Import-Module PSReadLine
no meu arquivo de perfil, que acesso vianotepad $PROFILE
. Como o problema existe apenas para o meu perfil, isso funciona para o meu usuário sem afetar nenhum outro usuário.Embora isso não resolva o problema - por enquanto corrige todos os meus problemas atuais.