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
PSReadLine fornece uma experiência de edição de linha de comando aprimorada no console do PowerShell.
Descrição longa
Houve muitas atualizações para o PSReadLine desde a versão fornecida no Windows PowerShell 5.1.
- v2.3.6 fornecido pela primeira vez no PowerShell 7.4.7 e 7.5.0
- v2.3.5 lançado pela primeira vez no PowerShell 7.4.2 e 7.5.0-preview.3
- v2.3.4 enviado pela primeira vez no PowerShell 7.4.0-rc.1
- v2.2.6 enviado pela primeira vez no PowerShell 7.3.0
- v2.1.0 enviado pela primeira vez no PowerShell 7.2.5
- v2.0.4 enviado pela primeira vez no PowerShell 7.0.11
- A v2.0.0 é fornecida no Windows PowerShell 5.1
Para obter mais informações sobre diferenças de versão, consulte about_PSReadLine_Release_Notes.
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 de edição de linha de comando avançada 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)
- Atalhos de teclado 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 de "palavra" baseada em token do PowerShell
- IntelliSense preditivo
- Exibição dinâmica da Ajuda no console sem perder seu lugar na linha de comando
PSReadLine requer o PowerShell 5.1 ou mais recente. O 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.
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 tabulação 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 adicionais específicos do domínio.
Habilitar IntelliSense Preditivo
O IntelliSense Preditivo está desabilitado por padrão. Para habilitar as 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
Associações de chave personalizadas
PSReadLine dá suporte a associações de teclas personalizadas usando o Set-PSReadLineKeyHandler cmdlet. A maioria das combinações de teclas 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
- Edite 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 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 associações de teclas 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 deseja inserir novamente a linha de comando que 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 combinações de teclas 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
PSReadLine mantém um arquivo de histórico contendo todos os comandos e dados inseridos na linha de comando. O arquivo de histórico é um arquivo chamado $($Host.Name)_history.txt, que resulta em um arquivo exclusivo para cada host. Por exemplo, o arquivo de histórico do console de Extensão do PowerShell no Visual Studio Code é Visual Studio Code Host_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/PSReadLineou$Env:HOME/.local/share/powershell/PSReadLine.
O histórico pode conter dados confidenciais, incluindo senhas. 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 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ê poderá 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 uma propriedade, acesse:
- Se essa operação de acesso de membro não fizer parte de uma atribuição, consideraremos que ela é segura
- Caso contrário, se o lado direito for um pipeline 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
O lançamento também melhorou a depuração de histórico sensível para permitir a recuperação do token usando as azferramentas , gcloude de kubectl linha 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
Feedback e contribuição para o PSReadLine
Sinta-se à vontade para enviar uma solicitação de pull ou enviar comentários na página do GitHub.
Consulte também
- O PSReadLine é fortemente influenciado pela biblioteca de readline GNU.