about_PSReadLine
Short Description
PSReadLine fornece uma experiência de edição de linha de comando aprimorada no console do PowerShell.
Houve muitas atualizações para PSReadLine desde a versão que acompanha o Windows PowerShell 5.1.
- v2.3.5 enviado 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
- v2.0.0 é fornecido no Windows PowerShell 5.1
Para obter mais informações sobre diferenças de versão, consulte about_PSReadLine_Release_Notes.
Descrição longa
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
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
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.