about_PSReadLine
Descrição breve
O PSReadLine fornece uma experiência de edição de linha de comando aprimorada no console do PowerShell.
Descrição longa
O PowerShell 7.4 é fornecido com o PSReadLine 2.3.4. A versão atual é PSReadLine 2.3.4. A versão atual do PSReadLine pode ser instalada e usada no Windows PowerShell 5.1 e mais recente. Para alguns recursos, você precisa estar executando o PowerShell 7.2 ou superior.
O PSReadLine fornece uma poderosa experiência de edição de linha de comando para o console do PowerShell. Ele fornece:
- Coloração da sintaxe da linha de comando
- Uma indicação visual de erros de sintaxe
- Uma melhor experiência multi-linha (edição e histórico)
- Ligações de chave personalizáveis
- Modos Cmd e Emacs
- Muitas opções de configuração
- Conclusão no estilo Bash (opcional no modo Cmd, padrão no modo Emacs)
- Emacs yank/kill-ring
- Movimento e exclusão de "palavra" baseados em token do PowerShell
- IntelliSense preditivo
- Exibição dinâmica da Ajuda no console sem perder seu lugar na linha de comando
O PSReadLine requer o PowerShell 5.1 ou mais recente. PSReadLine funciona com o host de console padrão do Windows, o Terminal do Windows e o Visual Studio Code. Ele não funciona no ISE do Windows PowerShell.
PSReadLine pode ser instalado a partir da Galeria do PowerShell. Para instalar o PSReadLine em uma versão com suporte do PowerShell, execute o seguinte comando.
Install-Module -Name PSReadLine -AllowClobber -Force
Observação
A partir do PowerShell 7.0, o PowerShell ignora o carregamento automático do PSReadLine no Windows se um programa leitor de tela for detectado. Atualmente, o PSReadLine não funciona bem com os leitores de tela. A renderização e a formatação padrão do PowerShell 7.0 no Windows funcionam corretamente. Você pode carregar manualmente o módulo, se necessário.
IntelliSense preditivo
O IntelliSense preditivo é uma adição ao conceito de conclusão de tabulação que auxilia o usuário a concluir comandos com êxito. Ele permite que os usuários descubram, editem e executem comandos completos com base em previsões correspondentes do histórico do usuário e plug-ins específicos de domínio adicionais.
Habilitar IntelliSense Preditivo
O IntelliSense Preditivo está desabilitado por padrão. Para habilitar previsões, basta executar o seguinte comando:
Set-PSReadLineOption -PredictionSource History
O parâmetro PredictionSource também pode aceitar plug-ins para requisitos personalizados e específicos do domínio.
Para desativar o IntelliSense preditivo, basta executar:
Set-PSReadLineOption -PredictionSource None
Observação
O IntelliSense preditivo está habilitado por padrão no PSReadLine 2.2.6. Para obter mais informações, consulte o histórico de versões do PSReadLine na seção Notas abaixo.
Ligações de chave personalizadas
PSReadLine oferece suporte a associações de chave personalizadas usando o Set-PSReadLineKeyHandler
cmdlet. A maioria das ligações de chave personalizadas chama uma das funções vinculáveis, por exemplo
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Você pode vincular um ScriptBlock a uma chave. O ScriptBlock pode fazer praticamente tudo o que você quiser. Alguns exemplos úteis incluem
- Editar a linha de comando
- Abrindo uma nova janela (por exemplo, ajuda)
- alterar diretórios sem alterar a linha de comando
O ScriptBlock recebe dois argumentos:
$key
- Um objeto [ConsoleKeyInfo] que é a chave que acionou a associação personalizada. Se você vincular o mesmo ScriptBlock a várias chaves e precisar executar ações diferentes dependendo da chave, poderá verificar$key
. Muitas associações personalizadas ignoram esse argumento.$arg
- Um argumento arbitrário. Na maioria das vezes, esse seria um argumento inteiro que o usuário passa das ligações de chave DigitArgument. Se sua vinculação não aceitar argumentos, é razoável ignorar esse argumento.
Vamos dar uma olhada em um exemplo que adiciona uma linha de comando ao histórico sem executá-lo. Isso é útil quando você percebe que esqueceu de fazer algo, mas não quer entrar novamente na linha de comando que você já inseriu.
$parameters = @{
Key = 'Alt+w'
BriefDescription = 'SaveInHistory'
LongDescription = 'Save current line in history but do not execute'
ScriptBlock = {
param($key, $arg) # The arguments are ignored in this example
# GetBufferState gives us the command line (with the cursor position)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
[ref]$cursor)
# AddToHistory saves the line in history, but does not execute it.
[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)
# RevertLine is like pressing Escape.
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
}
}
Set-PSReadLineKeyHandler @parameters
Você pode ver muitos outros exemplos no arquivo SamplePSReadLineProfile.ps1
, que está instalado na pasta do módulo PSReadLine .
A maioria das ligações de teclas usa algumas funções auxiliares para editar a linha de comando. Essas APIs estão documentadas em about_PSReadLine_Functions.
Observações
Histórico de Comandos
PSReadLine mantém um arquivo de histórico contendo todos os comandos e dados que você inseriu a partir da linha de comando. Os arquivos de histórico são um arquivo chamado $($host.Name)_history.txt
. Em sistemas Windows, o arquivo de histórico é armazenado em $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
. Em sistemas que não sejam Windows, os arquivos de histórico são armazenados em $env:XDG_DATA_HOME/powershell/PSReadLine
ou $env:HOME/.local/share/powershell/PSReadLine
.
O histórico pode conter dados confidenciais, incluindo senhas. PSReadLine tenta filtrar informações confidenciais. As linhas de comando que contêm as seguintes cadeias de caracteres não são gravadas no arquivo de histórico.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 melhora a filtragem de dados confidenciais
- Usa a Árvore de Sintaxe Abstrata (AST) do PowerShell da linha de comando analisada para procurar dados confidenciais.
- Usa uma lista de permissões de cmdlets seguros do módulo SecretManagement para permitir que esses comandos sejam adicionados ao histórico. A lista de permissões contém:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Por exemplo, os seguintes comandos podem ser gravados no arquivo de histórico:
Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token
Os comandos a seguir não estão sendo gravados no arquivo de histórico:
$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.
Se houver outros comandos que você não deseja gravar nos arquivos de histórico, você pode usar o parâmetro AddToHistoryHandler do Set-PSReadLineOption
cmdlet. Para obter um exemplo de como usar AddToHistoryHandler, consulte o Exemplo 7 de Set-PSReadLineOption.
PSReadLine 2.3.4 melhora a filtragem de dados confidenciais
Melhorada a depuração de histórico confidencial padrão para permitir que o histórico contenha acesso seguro à propriedade.
Quando a cadeia de caracteres confidencial faz parte de um acesso de propriedade:
- Se essa operação de acesso de membro não fizer parte de uma atribuição, então a consideramos segura
- Caso contrário, se o lado direito for um pipeline ou uma variável, também o consideramos seguro
Por exemplo, os casos de uso a seguir são considerados seguros e podem ser salvos no histórico.
$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token
A versão também melhorou a depuração de histórico sensível para permitir a recuperação de token usando as az
ferramentas de linha de comando , gcloud
e kubectl
.
Por exemplo, os casos de uso a seguir são considerados seguros e podem ser salvos no histórico.
kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token
Histórico de lançamentos do PSReadLine
Houve muitas atualizações para PSReadLine desde a versão que é fornecida no Windows PowerShell 5.1.
- A versão atual é PSReadLine 2.3.4
- O PowerShell 7.4 é fornecido com o PSReadLine 2.3.4
- O PowerShell 7.3 é fornecido com o PSReadLine 2.2.6
- O PowerShell 7.2 é fornecido com o PSReadLine 2.1.0
- PowerShell 7.0.11 fornecido com PSReadLine 2.0.4
- O PowerShell 5.1 é fornecido com o PSReadLine 2.0.0
Para obter uma lista completa de alterações, consulte o PSReadLine ChangeLog.
- PSReadLine 2.3.4
Além de várias correções de bugs, esta versão inclui os seguintes aprimoramentos:
ListView rolável para IntelliSense preditivo
- Ajusta automaticamente o tamanho com base no tamanho da janela do terminal
- Pode conter até 50 resultados de previsão
- Cabeçalho de lista dinâmica que mostra o número de resultados e a fonte de previsão atual
Depuração de histórico sensível aprimorada para permitir a recuperação de token de
az
,gcloud
ekubectl
Melhorar a depuração de histórico confidencial padrão para permitir o acesso seguro à propriedade
Adicionado suporte para upcasing, downcasing e maiúsculas palavras
Fazer com que a conclusão de tabulação mostre resultados diferentes
ListItemText
apenas por maiúsculas e minúsculasSuporta o comando
<d,i,w>
text-object no modo de edição VIAlterar a cor padrão para previsão embutida para escurecer
Adicione um exemplo ao LEIA-ME para transformar o ponto de código Unicode em caractere Unicode por
Alt+x
Adicione a opção TerminateOrphanedConsoleApps no Windows para eliminar o processo de conexão de console órfão que pode atrapalhar a leitura da entrada do console
PSReadLine 2.2.6
Nesta versão, o recurso IntelliSense preditivo é habilitado por padrão, dependendo das seguintes condições:
- Se houver suporte para o Terminal Virtual (VT) e o PSReadLine em execução no PowerShell 7.2 ou superior, PredictionSource será definido como
HistoryAndPlugin
- Se VT for suportado e PSReadLine em execução no PowerShell antes de 7.2, PredictionSource será definido como
History
- Se o VT não for suportado, PredictionSource será definido como
None
- Se houver suporte para o Terminal Virtual (VT) e o PSReadLine em execução no PowerShell 7.2 ou superior, PredictionSource será definido como
PSReadLine 2.2.5
Versão oficial de manutenção com pequenas correções de bugs.
PSReadLine 2.2.2
- A PSReadLine adicionou dois novos recursos preditivos do IntelliSense:
- Adicionado o parâmetro PredictionViewStyle para permitir a seleção do novo
ListView
. - PSReadLine conectado às
CommandPrediction
APIs introduzidas no PowerShell 7.2 para permitir que um usuário possa importar um módulo de previsão que pode renderizar as sugestões de uma fonte personalizada.
- Adicionado o parâmetro PredictionViewStyle para permitir a seleção do novo
- Atualizado para usar a versão 1.0.0 do
Microsoft.PowerShell.Pager
para ajuda dinâmica - Melhoria na depuração de itens confidenciais do histórico
- Muitas correções de bugs e pequenas melhorias
- A PSReadLine adicionou dois novos recursos preditivos do IntelliSense:
PSReadLine 2.1.0
Esta versão acumula os seguintes aprimoramentos adicionados desde a versão 2.0.4:
- Adicionar sugestões do IntelliSense preditivo do histórico de comandos
- Muitas correções de bugs e aprimoramentos de API
PSReadLine 2.0.4
Esta versão acumula os seguintes aprimoramentos adicionados desde a versão 2.0.0:
- Adicionado o
-Chord
parâmetro paraGet-PSReadLineKeyHandler
permitir a pesquisa de ligações de chave específicas
- Adicionado o
Feedback & contribuindo para o PSReadLine
Sinta-se à vontade para enviar uma solicitação pull ou enviar comentários na página do GitHub.
Confira também
- PSReadLine é fortemente influenciado pela biblioteca de linha de leitura GNU.