about_PSReadLine
Short Description
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.
PSReadLine fornece uma poderosa experiência de edição de linha de comando para o console do PowerShell. 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 teclas 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 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
PSReadLine requer PowerShell 5.1 ou mais recente. PSReadLine funciona com o host de console padrão do Windows, Terminal do Windows e 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 suportada do PowerShell, execute o seguinte comando.
Install-Module -Name PSReadLine -AllowClobber -Force
Nota
A partir do PowerShell 7.0, o PowerShell ignora o carregamento automático do PSReadLine no Windows se um programa leitor de tela for detetado. Atualmente, PSReadLine não funciona bem com os leitores de tela. A renderização e 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 preenchimento de guias 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 adicionais específicos do domínio.
Ativar o IntelliSense Preditivo
O IntelliSense preditivo está desativado 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 específicos e personalizados do domínio.
Para desativar o Predictive IntelliSense, basta executar:
Set-PSReadLineOption -PredictionSource None
Nota
O IntelliSense preditivo está ativado 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 teclas 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
- Abrir 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 disparou a ligaçã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 ligaçõ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 a sua vinculação não aceitar argumentos, é razoável ignorá-los.
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 já entrou.
$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.
Notas
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 seguintes comandos 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 Exemplo 7 de Set-PSReadLineOption.
PSReadLine 2.3.4 melhora a filtragem de dados confidenciais
Aperfeiçoada a depuração de histórico confidencial padrão para permitir que o histórico contenha acesso seguro à propriedade.
Quando a cadeia de caracteres sensível faz parte de um acesso à propriedade:
- Se esta operação de acesso de membro não fizer parte de uma atribuição, consideramo-la segura
- Caso contrário, se o lado direito for um gasoduto ou uma variável, também o consideramos seguro
Por exemplo, os seguintes casos de uso 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 , gcloud
e linha kubectl
de comando.
Por exemplo, os seguintes casos de uso 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 acompanha o 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 PSReadLine 2.1.0
- PowerShell 7.0.11 fornecido com PSReadLine 2.0.4
- O PowerShell 5.1 é fornecido com PSReadLine 2.0.0
Para obter uma lista completa das alterações, consulte o ChangeLog PSReadLine.
- PSReadLine 2.3.4
Além de várias correções de bugs, esta versão inclui as seguintes melhorias:
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
Limpeza de histórico confidencial aprimorada para permitir a recuperação de token de
az
,gcloud
ekubectl
Melhore a depuração de histórico confidencial padrão para permitir o acesso seguro à propriedade
Adicionado suporte para upcasing, downcasing e capitalização de palavras
Fazer com que o preenchimento da guia mostre resultados que
ListItemText
são diferentes apenas por maiúsculas e minúsculasSuporta o comando
<d,i,w>
text-object no modo de edição VIAlterar a cor padrão da previsão embutida para escurecer
Adicione um exemplo ao LEIA-ME para transformar o ponto de código Unicode em caracter Unicode por
Alt+x
Adicione a opção TerminateOrphanedConsoleApps no Windows para matar o processo anexado ao console órfão que pode atrapalhar a leitura da entrada do Console
PSReadLine 2.2.6
Nesta versão, o recurso Predictive IntelliSense é ativado por padrão, dependendo das seguintes condições:
- Se o Terminal Virtual (VT) for suportado e 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 da 7.2, PredictionSource será definido como
History
- Se VT não for suportado, PredictionSource será definido como
None
- Se o Terminal Virtual (VT) for suportado e PSReadLine em execução no PowerShell 7.2 ou superior, PredictionSource será definido como
PSReadLine 2.2.5
Lançamento de manutenção oficial com pequenas correções de bugs.
PSReadLine 2.2.2
- O 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 sensíveis do histórico
- Muitas correções de bugs e melhorias menores
- O 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 Predictive IntelliSense a partir do histórico de comandos
- Muitas correções de bugs e melhorias na 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 PSReadLine
Sinta-se à vontade para enviar uma solicitação pull ou enviar feedback na página do GitHub.
Consulte Também
- PSReadLine é fortemente influenciado pela biblioteca de linha de leitura GNU.