Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
O PSReadLine fornece uma experiência aprimorada de edição de linha de comando no console do PowerShell.
Descrição longa
O PowerShell 7.3 é fornecido com o PSReadLine 2.2.6. 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 experiência avançada de edição de linha de comando para o console do PowerShell. Ele fornece:
- Coloração de sintaxe da linha de comando
- Uma indicação visual de erros de sintaxe
- Uma melhor experiência de várias linhas (edição e histórico)
- Associações de chave 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 puxar/matar anel
- Movimentação e exclusão baseadas 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. O PSReadLine funciona com o host de console do Windows padrão, o Terminal do Windows e o Visual Studio Code. Ele não funciona no ISE do Windows PowerShell.
O PSReadLine pode ser instalado na Galeria do PowerShell. Para instalar o PSReadLine em uma versão com suporte do PowerShell, execute o comando a seguir.
Install-Module -Name PSReadLine -AllowClobber -Force
Observação
A partir do PowerShell 7.0, o PowerShell ignorará o carregamento automático do PSReadLine no Windows se um programa de 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 preenchimento de guia que ajuda 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 o 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 específicos e personalizados do domínio.
Para desabilitar o IntelliSense Preditivo, basta executar:
Set-PSReadLineOption -PredictionSource None
Observação
O IntelliSense preditivo é 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.
Associações de chave personalizadas
O PSReadLine dá suporte a associações de chave personalizadas usando o cmdlet Set-PSReadLineKeyHandler. A maioria das associações de chave personalizadas chama uma das funções associáveis , por exemplo
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Você pode associar 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 disparou a associação personalizada. Se você associar 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 associações de chave DigitArgument. Se a associaçã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á-la. Isso é útil quando você percebe que esqueceu de fazer algo, mas não quer inserir novamente a 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 SamplePSReadLineProfile.ps1de arquivo, que está instalado na pasta de módulo PSReadLine.
A maioria das associações de chave usa algumas funções auxiliares para editar a linha de comando. Essas APIs estão documentadas em about_PSReadLine_Functions.
Anotações
Histórico de Comandos
O PSReadLine mantém um arquivo de histórico que contém todos os comandos e dados inseridos na 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 não 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. O PSReadLine tenta filtrar informações confidenciais. Todas as linhas de comando que contêm as cadeias de caracteres a seguir não são gravadas no arquivo de histórico.
passwordasplaintexttokenapikeysecret
PSReadLine 2.2.0 melhora a filtragem de dados confidenciais
- Usa a AST (Árvore de Sintaxe Abstrata) 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-SecretGet-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-SecretVault
Por exemplo, os seguintes comandos têm permissão para serem 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, use o parâmetro AddToHistoryHandler do cmdlet Set-PSReadLineOption. 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
Melhorou a limpeza de histórico confidencial padrão para permitir que o histórico contenha acesso à propriedade segura.
Quando a cadeia de caracteres sensível faz parte de um acesso à propriedade:
- Se essa operação de acesso a membros não fizer parte de uma atribuição, então a consideraremos segura
- Caso contrário, se o lado direito for um pipeline ou uma variável, também o consideraremos 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 limpeza de histórico confidencial para permitir a recuperação de token usando as ferramentas de linha de comando az, 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 no PSReadLine desde a versão 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 bug, 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
Aprimoramos a limpeza do histórico confidencial para permitir a recuperação de tokens de
az,gcloudekubectl.Melhorar a limpeza de histórico confidencial padrão para permitir o acesso seguro à propriedade
Adicionado suporte para transformar textos em maiúsculas, minúsculas, e capitalizar palavras.
Faça com que o preenchimento da guia mostre os resultados cujos
ListItemTextsão diferentes apenas por casoDá suporte ao comando de objeto de texto
<d,i,w>no modo de edição VIAlterar a cor padrão da previsão inline para opaca
Adicione um exemplo ao README para transformar o ponto de código Unicode em caractere Unicode
Alt+xAdicione a opção TerminateOrphanedConsoleApps no Windows para eliminar o processo órfão anexado ao console que pode atrapalhar a leitura da entrada do console
PSReadLine 2.2.6
Nesta versão, o recurso Do IntelliSense Preditivo é habilitado por padrão, dependendo das seguintes condições:
- Se houver suporte para VT (Terminal Virtual) e PSReadLine em execução no PowerShell 7.2 ou superior, PredictionSource será definido como
HistoryAndPlugin - Se houver suporte para VT e PSReadLine em execução no PowerShell antes da 7.2, PredictionSource será definido como
History - Se não houver suporte para o VT, PredictionSource será definido como
None
- Se houver suporte para VT (Terminal Virtual) e 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 bug.
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 APIs de
CommandPredictionintroduzidas no PowerShell 7.2 para permitir que um usuário importe um módulo de preditor que possa exibir 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.Pagerpara obter ajuda dinâmica - Melhorada a remoção de itens de histórico confidenciais
- 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 IntelliSense preditivas do histórico de comandos
- Muitas correções de bug e aprimoramentos de API
PSReadLine 2.0.4
Esta versão inclui os seguintes aprimoramentos adicionados desde a versão 2.0.0:
- Adicionado o
-Chordparâmetro paraGet-PSReadLineKeyHandlerpermitir a pesquisa de atalhos de teclado específicos
- Adicionado o
Comentários & contribuindo para o PSReadLine
Fique à vontade para enviar uma solicitação pull ou enviar comentários na página do GitHub.
Consulte Também
- O PSReadLine é fortemente influenciado pelo GNU biblioteca de de linha de leitura.