Personalizar seu ambiente de shell
Um perfil do PowerShell é um script executado quando o PowerShell é iniciado. Você pode usar o perfil para personalizar o ambiente. Você pode:
- adicionar aliases, funções e variáveis
- carregar módulos
- criar unidades do PowerShell
- executar comandos arbitrários
- e alterar as configurações de preferência
A colocação dessas configurações em seu perfil garante que elas estejam disponíveis sempre que você iniciar o PowerShell em seu sistema.
Observação
Para executar scripts no Windows, a política de execução do PowerShell precisa ser definida como RemoteSigned
no mínimo. As políticas de execução não se aplicam ao macOS e ao Linux. Para obter mais informações, confira about_Execution_Policies.
A variável $PROFILE
A variável automática $PROFILE
armazena os caminhos para os perfis do PowerShell que estão disponíveis na sessão atual.
Há quatro perfis possíveis disponíveis para dar suporte a diferentes escopos de usuário e diferentes hosts do PowerShell. Os caminhos totalmente qualificados para cada script de perfil são armazenados nas propriedades de membro a seguir de $PROFILE
.
- AllUsersAllHosts
- AllUsersCurrentHost
- CurrentUserAllHosts
- CurrentUserCurrentHost
Você pode criar scripts de perfil executados para todos os usuários ou apenas um usuário, o CurrentUser. Os perfis CurrentUser são armazenados no diretório base do usuário.
Também há perfis que são executados para todos os hosts do PowerShell ou hosts específicos. O script de perfil para cada host do PowerShell tem um nome exclusivo para esse host. Por exemplo, o nome do arquivo para o Host de Console padrão no Windows ou o aplicativo de terminal padrão em outras plataformas é Microsoft.PowerShell_profile.ps1
. Para o VS Code (Visual Studio Code), o nome do arquivo é Microsoft.VSCode_profile.ps1
.
Para obter mais informações, consulte about_Profiles.
Por padrão, referenciar a variável $PROFILE
retorna o caminho para o perfil "Usuário Atual, Host Atual". O caminho dos outros perfis pode ser acessado por meio das propriedades da variável $PROFILE
.
Por exemplo:
PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1
Como criar seu perfil pessoal
Quando você instala o PowerShell pela primeira vez em um sistema, os arquivos de script de perfil e os diretórios aos quais eles pertencem não existem. O comando a seguir cria o arquivo de script do perfil "Usuário Atual, Host Atual" se ele não existir.
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
O parâmetro Force do cmdlet New-Item
cria as pastas necessárias quando elas não existem.
Depois de criar o arquivo de script, você poderá usar seu editor favorito para personalizar o ambiente do shell.
Adicionar personalizações ao perfil
Os artigos anteriores falavam sobre como usar preenchimento com tab, preditores de comando e aliases. Esses artigos mostraram os comandos usados para carregar os módulos necessários, criar completadores personalizados, definir associações de teclas e outras configurações. Esses são os tipos de personalizações que são interessantes ter disponíveis em todas as sessões interativas do PowerShell. O script de perfil é o local para essas configurações.
A maneira mais simples de editar o script de perfil é abrir o arquivo no seu editor de código favorito. Por exemplo, o comando a seguir abre o perfil no VS Code.
code $PROFILE
Você também pode usar notepad.exe
no Windows, vi
no Linux ou em qualquer outro editor de texto.
O script de perfil a seguir tem exemplos para muitas das personalizações mencionadas nos artigos anteriores. Você pode usar qualquer uma dessas configurações em seu próprio perfil.
## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
$null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
$null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}
## Customize the prompt
function prompt {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = [Security.Principal.WindowsPrincipal] $identity
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
$prefix = if (Test-Path variable:/PSDebugContext) { '[DBG]: ' } else { '' }
if ($principal.IsInRole($adminRole)) {
$prefix = "[ADMIN]:$prefix"
}
$body = 'PS ' + $PWD.path
$suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
"${prefix}${body}${suffix}"
}
## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed
if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
# define escape char since "`e" may not be supported
$esc = [char]0x1b
$PSStyle = [pscustomobject]@{
Foreground = @{
Magenta = "${esc}[35m"
BrightYellow = "${esc}[93m"
}
Background = @{
BrightBlack = "${esc}[100m"
}
}
}
## Set PSReadLine options and keybindings
$PSROptions = @{
ContinuationPrompt = ' '
Colors = @{
Operator = $PSStyle.Foreground.Magenta
Parameter = $PSStyle.Foreground.Magenta
Selection = $PSStyle.Background.BrightBlack
InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
}
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine
## Add argument completer for the dotnet CLI tool
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition $commandAst.ToString() |
ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
Este script de perfil fornece exemplos para a seguinte personalização:
- Adiciona dois novos PSDrives para os outros hives raiz do registro.
- Cria um prompt personalizado que muda se você estiver executando em uma sessão com privilégios elevados.
- Configura o PSReadLine e adiciona a associação de teclas. As configurações de cor usam o recurso $PSStyle para definir as configurações de cor ANSI.
- Adiciona a conclusão com tab para a ferramenta dotnet CLI. A ferramenta fornece parâmetros para ajudar a resolver os argumentos de linha de comando. O bloco de script para Register-ArgumentCompleter usa esse recurso para fornecer a conclusão com tab.