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
- Se o Terminal Virtual (VT) for suportado e o PSReadLine funcionar em PowerShell 7.2 ou superior, predictionSource está definido para
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.
- Adicionei o parâmetro PredictionViewStyle para permitir a seleção do novo
- 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 acrescentou duas novas funcionalidades preditivas do IntelliSense:
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 paraGet-PSReadLineKeyHandler
permitir a procura de ligações específicas
- Adicionei o
Feedback & a contribuir para o PSReadLine
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.