Solarized, PowerShell e prompt elevado
Inspirado pelo post do Scott Hanselman sobre o Solarized, resolvi fazer algumas alterações na minha configuração do PowerShell.
Se você não leu o post do Scott, faça isso agora. Eu espero. ?
Agora, eis o que eu queria fazer:
Já há muito tempo que havia configurado meu PowerShell para mostrar o prompt elevado (“modo Administrador”) com uma cor diferente, para ficar fácil de distinguir e evitar executar comandos perigosos no lugar errado.
Para isso, eu tinha o seguinte comando no meu perfil do PowerShell:
if (Test-IsAdmin) { $host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::DarkRed Clear-Host }
A função Test-Admin
acima não existe no PowerShell. Ela serve para ver se o prompt está elevado ou não. O código dela (que coloquei também no meu perfil do PowerShell) é:
Function Test-IsAdmin { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal $identity return $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) }
O que essa função faz é verificar se o token do usuário atual contém o grupo Administrators. Isso só acontece num processo elevado (ou se o UAC estiver desligado). Nesse caso, mudo a cor de fundo da tela para vermelho e apago a tela para aplicar a alteração.
Mudando para Solarized
Com a inspiração do post do Scott, resolvi adotar o Solarized no meu PowerShell. A ideia era usar o tema escuro para o prompt normal, enquanto o tema claro substituiria meu prompt vermelho para o terminal elevado/administrativo.
O processo para isso tem três partes:
1) Mudar a configuração padrão do CMD
Primeira coisa a fazer. Configure o default do CMD - você pode precisar para as situações (raras) em que você roda o PowerShell a partir do CMD. Além disso, dá uma certa consistência aos meus terminais (CMD e PS ficam com a mesma cor).
Para isso, importe o arquivo solarized-dark.reg no seu Windows. Isso faz com que a cor-padrão do seu console seja a definida no Solarized Dark.
2) Alterar seu perfil do PowerShell
A segunda parte da configuração precisa ser feita no perfil do PowerShell. Com ela, cada vez que um prompt é aberto ele carrega as cores do Solarized. Baixe os arquivos Set-SolarizedDarkColorDefaults.ps1 e Set-SolarizedLightColorDefaults.ps1 na mesma pasta do seu perfil do PowerShell (tipicamente C:\Users\<usuário>\Documents\WindowsPowerShell
).
Agora, acrescente o código abaixo ao início do seu arquivo de perfil (tipicamente C:\Users\<usuário>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
):
Function Test-IsAdmin { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal $identity return $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) } try { if (Test-IsAdmin) { . (Join-Path $PSScriptRoot "Set-SolarizedLightColorDefaults.ps1") $host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::White } else { . (Join-Path $PSScriptRoot "Set-SolarizedDarkColorDefaults.ps1") $host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::Black } } finally { Clear-Host }
3) Atualizar o(s) link(s) do PowerShell
Agora, para o Solarized realmente “funcionar”, você precisa atualizar os links do PowerShell que estão na pasta %APPDATA%\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
, de modo que eles usem as cores do Solarized. Baixe os scripts Get-Link.ps1 e Update-Link.ps1, abra um prompt de PowerShell no diretório onde você salvou esses scripts e execute os comandos abaixo:
$links = Get-ChildItem (Join-Path $env:APPDATA 'Microsoft\Windows\Start Menu\Programs\Windows PowerShell') -Filter '*.lnk' $links | % {.\Update-Link.ps1 -Path $_.FullName -Theme Dark}
Voilà! Prompts de PowerShell atualizados - Dark para os prompts normais, Light para os elevados!
Um abraço,
Igor
-
Tags:
- PowerShell
- Windows
21/06/2017 | Por Igor Abade V. Leite | Em Técnico | Tempo de leitura: 2 mins.