Compartilhar via


Personalizar seu ambiente de shell

Um perfil do PowerShell é um script que é executado quando o PowerShell é iniciado. Você pode usar o perfil para personalizar o ambiente. É possível:

  • Adicionar aliases, funções e variáveis
  • Carregar módulos
  • Criar unidades do PowerShell
  • Executar comandos arbitrários
  • Alterar configurações de preferência

Colocar essas 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 RemoteSigned como no mínimo. As políticas de execução não se aplicam ao macOS e ao Linux. Para obter mais informações, consulte about_Execution_Policy.

A variável $PROFILE

A variável $PROFILE automática armazena os caminhos para os perfis do PowerShell disponíveis na sessão atual.

Há quatro perfis possíveis disponíveis para dar suporte a escopos de usuário diferentes 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 que são executados para todos os usuários ou apenas um usuário, o CurrentUser. Os perfis currentUser são armazenados no caminho do diretório base do usuário. O local varia dependendo do sistema operacional e da versão do PowerShell que você usa.

Por padrão, referenciar a $PROFILE variável retorna o caminho para o perfil "Usuário Atual, Host Atual". O caminho de outros perfis pode ser acessado por meio das propriedades da $PROFILE variável. O comando a seguir mostra os locais de perfil padrão no Windows.

PS> $PROFILE | Select-Object *
AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\username\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\username\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 69

O comando a seguir mostra os locais de perfil padrão no Ubuntu Linux.

$PROFILE | Select-Object *

AllUsersAllHosts       : /opt/microsoft/powershell/7/profile.ps1
AllUsersCurrentHost    : /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : /home/username/.config/powershell/profile.ps1
CurrentUserCurrentHost : /home/username/.config/powershell/Microsoft.PowerShell_profile.ps1
Length                 : 67

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 do Console padrão no Windows ou o aplicativo de terminal padrão em outras plataformas é Microsoft.PowerShell_profile.ps1. Para o Visual Studio Code (VS Code), o nome do arquivo é Microsoft.VSCode_profile.ps1.

Para obter mais informações, consulte about_Profiles.

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 criará o arquivo de script de 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 New-Item cmdlet cria as pastas necessárias quando elas não existem. Depois de criar o arquivo de script, você pode usar seu editor favorito para personalizar seu ambiente de shell.

Adicionando personalizações ao seu 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 chave e outras configurações. Essas personalizações são do tipo que você deseja ter disponível 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 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 associação de chave. 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.