about_PSReadLine

Descrição Breve

O PSReadLine proporciona uma experiência de edição melhorada da linha de comando na consola PowerShell.

Descrição longa

PowerShell 7.3 navios com PSReadLine 2.2.6. Existem versões mais recentes disponíveis. A versão atual do PSReadLine pode ser instalada e usada em Windows PowerShell 5.1 e mais recente. Para algumas funcionalidades, tens de estar a executar o PowerShell 7.2 ou superior.

A PSReadLine proporciona uma poderosa experiência de edição de linha de comando para a consola PowerShell. Fornece:

  • Coloração sintaxe da linha de comando
  • Uma indicação visual de erros de sintaxe
  • Uma melhor experiência multi-linha (edição e história)
  • Encadernações de chaves personalizáveis
  • Modos Cmd e Emacs
  • Muitas opções de configuração
  • Conclusão do estilo bash (opcional no modo Cmd, padrão no modo Emacs)
  • Emacs yank/kill-ring
  • Movimento e eliminação de "palavra" baseado em PowerShell
  • Intellisense preditivo
  • Exibição dinâmica de Ajuda na consola sem perder o seu lugar na linha de comando

O PSReadLine requer PowerShell 5.1 ou mais recente. O PSReadLine funciona com o anfitrião de consola padrão do Windows, o Terminal de Janela e o Código do Estúdio Visual. Não funciona no Windows PowerShell ise.

O PSReadLine pode ser instalado a partir do Galeria do PowerShell. Para instalar o PSReadLine numa versão suportada do PowerShell, executar o seguinte comando.

Install-Module -Name PSReadLine -AllowClobber -Force

Nota

Começando pelo PowerShell 7.0, o PowerShell salta para o Windows o carregamento automático do PSReadLine no Windows se for detetado um programa de leitor de ecrã. Atualmente, o PSReadLine não funciona bem com os leitores de ecrã. A renderização e formatação padrão do PowerShell 7.0 no Windows funcionam corretamente. Se necessário, pode carregar manualmente o módulo.

Intellisense preditivo

O Predictive IntelliSense é uma adição ao conceito de conclusão do separador que ajuda o utilizador a completar com sucesso os comandos. Permite que os utilizadores descubram, editem e executem comandos completos com base em previsões correspondentes do histórico do utilizador e plugins específicos de domínio adicionais.

Ativar o IntelliSense Preditivo

O IntelliSense preditivo é desativado por defeito. Para ativar as previsões, basta executar o seguinte comando:

Set-PSReadLineOption -PredictionSource History

O parâmetro PredictionSource também pode aceitar plugins para requisitos específicos e personalizados de domínio.

Para desativar o IntelliSense Preditivo, basta correr:

Set-PSReadLineOption -PredictionSource None

Nota

O IntelliSense preditivo é ativado por predefinição no PSReadLine 2.2.6. Para mais informações consulte, o histórico de lançamentos psReadLine na secção Notas abaixo.

Encadernações de chaves personalizadas

O PSReadLine suporta ligações de chaves personalizadas utilizando o Set-PSReadLineKeyHandler cmdlet. A maioria das ligações de chaves personalizadas chamam uma das funções bindable, por exemplo

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Pode ligar um ScriptBlock a uma chave. O ScriptBlock pode fazer o que quiser. Alguns exemplos úteis incluem

  • editar a linha de comando
  • abrindo uma nova janela (por exemplo, ajuda)
  • mudar diretórios sem alterar a linha de comando

O ScriptBlock recebe dois argumentos:

  • $key - Um objeto [ConsoleKeyInfo] que é a chave que desencadeou a ligação personalizada. Se ligar o mesmo ScriptBlock a várias teclas e precisar de executar diferentes ações dependendo da chave, pode verificar $key. Muitas ligações personalizadas ignoram este argumento.

  • $arg - Um argumento arbitrário. Na maioria das vezes, este seria um argumento inteiro que o utilizador passa a partir das chaves ligações DigitArgument. Se a sua ligação não aceita argumentos, é razoável ignorar este argumento.

Vamos dar uma olhada num exemplo que adiciona uma linha de comando à história sem executá-la. Isto é útil quando te apercebes que te esqueceste de fazer alguma coisa, mas não queres voltar a entrar na linha de comando que já entraste.

$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

Pode ver muitos mais exemplos no ficheiro SamplePSReadLineProfile.ps1, que está instalado na pasta do módulo PSReadLine .

A maioria das ligações principais utilizam algumas funções de ajudante para editar a linha de comando. Essas APIs estão documentadas em about_PSReadLine_Functions.

Notas

História do Comando

O PSReadLine mantém um ficheiro de histórico contendo todos os comandos e dados que inseriu a partir da linha de comando. Os ficheiros de histórico são um ficheiro chamado $($host.Name)_history.txt. Nos sistemas Windows, o ficheiro de histórico é armazenado em $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. Em sistemas não Windows, os ficheiros 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 sensíveis, incluindo palavras-passe. O PSReadLine tenta filtrar informações sensíveis. Quaisquer linhas de comando que contenham as seguintes cordas não estão escritas no ficheiro histórico.

  • palavra-passe
  • texto asplain
  • token
  • apikey
  • segredo

O PSReadLine 2.2.0 melhora a filtragem de dados sensíveis das seguintes formas:

  • Utiliza a Árvore de Sintaxe Abstrata PowerShell (AST) da linha de comando parsed para procurar dados sensíveis.
  • Utiliza uma lista de cmdlets seguros do módulo SecretManagement para permitir que esses comandos sejam adicionados à história. A lista de admissõ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 escritos no ficheiro 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 seguintes comandos não estão a ser escritos para o ficheiro 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.

Histórico de lançamentos PSReadLine

Tem havido muitas atualizações para o PSReadLine desde a versão que envia em Windows PowerShell 5.1.

  • PowerShell 7.3 navios com PSReadLine 2.2.6
  • PowerShell 7.2.5 navios com PSReadLine 2.1.0
  • PowerShell 7.0.11 navios com PSReadLine 2.0.4
  • PowerShell 5.1 navios com PSReadLine 2.0.0

Para obter uma lista completa de alterações, consulte o PsReadLine ChangeLog.

  • PSReadLine 2.2.6

    Nesta versão, a funcionalidade Predictive IntelliSense é ativada por padrão, dependendo das seguintes condições:

    • Se o Terminal Virtual (VT) for suportado e o PSReadLine funcionar em PowerShell 7.2 ou superior, predictionSource está definido para HistoryAndPlugin
    • Se o VT for suportado e o PSReadLine funcionar em PowerShell antes de 7.2, o PredictionSource está definido para History
    • Se o VT não for suportado, o PredictionSource está definido para None
  • PSReadLine 2.2.5

    Desbloqueio oficial de manutenção com pequenas correções de erros.

  • PSReadLine 2.2.2

    • PSReadLine acrescentou duas novas funcionalidades preditivas do IntelliSense:
      • Adicionei o parâmetro PredictionViewStyle para permitir a seleção do novo ListView.
      • O PSReadLine ligado às CommandPrediction APIs introduzidos no PowerShell 7.2 para permitir que um utilizador possa importar um módulo preditor que possa tornar as sugestões a partir de uma fonte personalizada.
    • Atualizado para usar a versão 1.0.0 de Microsoft.PowerShell.Pager ajuda dinâmica
    • Melhorou a limpeza de itens de história sensíveis
    • Muitas correções de bugs e melhorias menores
  • PSReadLine 2.1.0

    Esta versão adiciona as seguintes melhorias adicionadas desde o lançamento 2.0.4:

    • Adicione sugestões preditivas intelliSense do histórico de comandos
    • Muitas correções de bugs e melhorias de API
  • PSReadLine 2.0.4

    Esta versão adiciona as seguintes melhorias adicionadas desde a versão 2.0.0:

    • Adicionei o -Chord parâmetro para Get-PSReadLineKeyHandler permitir a procura de ligações específicas

Feedback & a contribuir para o PSReadLine

PSReadLine no GitHub

Sinta-se livre para submeter um pedido de puxar ou enviar feedback na página gitHub.

Consulte também

  • O PSReadLine é fortemente influenciado pela biblioteca de leitura GNU.