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 azferramentas de linha de comando , gcloude 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, gcloude kubectl

  • 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úsculas

  • Suporta o comando <d,i,w> text-object no modo de edição VI

  • Alterar 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
  • 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.
    • 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
  • 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 para Get-PSReadLineKeyHandler permitir a pesquisa de ligações de chave específicas

Feedback & contribuindo para o PSReadLine

PSReadLine no GitHub

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.