Windows PowerShell: alterando o prompt de comando

86

Usando o Windows PowerShell, como altero o prompt de comando?

Por exemplo, o prompt padrão diz

PS C:\Documents and Settings\govendes\My Documents>

Eu quero personalizar essa string.

Sashang
fonte

Respostas:

110

Basta colocar a função promptem seu perfil do PowerShell ( notepad $PROFILE), por exemplo:

function prompt {"PS: $(get-date)>"}

ou colorido:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}
Ocaso Protal
fonte
3
notepad $PROFILEnão funciona no Windows 7 a partir de um prompt de administração do PowerShell
jcollum
19
Ahh, vejo que você precisa criar o perfil primeiro:new-item -itemtype file -path $profile -force
jcollum
4
Nota: Você pode simplesmente colar a função prompt no powershell para alterar o caminho do prompt em vez de salvar a função em seu perfil, mas você terá que fazer isso sempre que iniciar o powershell.
Larry Battle
3
Você também precisa executar o Powershell como administrador e fazer Set-ExecutionPolicy RemoteSigned.
qed
1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedse você deseja apenas alterar para o usuário atual ou não pode executar como administrador.
cz
21

Relacionado a um comentário à resposta de Ocaso Protal , o seguinte é necessário para o Windows Server 2012, bem como o Windows 7 (em uma janela do PowerShell):

new-item -itemtype file -path $profile -force
notepad $PROFILE

Eu sugeriria o seguinte como um prompt se você executar com vários nomes de usuário (por exemplo, você + um login de produção):

function Global:prompt {"PS [$Env:username]$PWD`n>"} 

(O crédito vai para David I. McIntosh por este.)

Warren Stevens
fonte
1
Você também precisa executar o Powershell como administrador e fazer Set-ExecutionPolicy RemoteSigned.
qed
11

No prompt, gosto de um carimbo de data / hora atual e letras de unidade resolvidas para unidades de rede. Para torná-lo mais legível, coloquei-o em duas linhas e brinquei um pouco com as cores.

Com o CMD, acabei com

PROMPT=$E[33m$D$T$H$H$H$S$E[37m$M$_$E[1m$P$G

Para PowerShell, obtive o mesmo resultado com:

function prompt {
    $dateTime = get-date -Format "dd.MM.yyyy HH:mm:ss"
    $currentDirectory = $(Get-Location)
    $UncRoot = $currentDirectory.Drive.DisplayRoot

    write-host "$dateTime" -NoNewline -ForegroundColor White
    write-host " $UncRoot" -ForegroundColor Gray
    # Convert-Path needed for pure UNC-locations
    write-host "PS $(Convert-Path $currentDirectory)>" -NoNewline -ForegroundColor Yellow
    return " "
}

O que é um pouco mais legível :-)

BTW:

  • Eu prefiro em powershell_ise.exe $PROFILEvez do bloco de notas (burro) .
  • Se você gosta de depurar seu prompt () com pontos de interrupção, você deve renomear a função de prompt para qualquer outra coisa (ou tentar em outro arquivo). Caso contrário, você pode acabar em um loop: quando você para a depuração, prompt () é chamado novamente e você para no ponto de interrupção novamente. Muito irritante, a princípio ...
Trivia Coder
fonte
É mesmo o que eu procurava!
Glen Little
8

Se você quiser fazer isso sozinho, a resposta de Ocaso Protal é o caminho a percorrer. Mas se você é preguiçoso como eu e só quer algo para fazer isso por você, então recomendo o pacote Pshazz de Luke Sampson .

Só para mostrar como você pode ser preguiçoso, vou fornecer um tutorial rápido.

  • Instale Pshazz com Scoop ( scoop install pshazz)
  • Use um bom tema predefinido ( pshazz use msys)
  • Beba cerveja (root)

O Pshazz também permite que você crie seus próprios temas, o que é tão simples quanto configurar um arquivo JSON. Confira o meu para ver como é fácil!

Fomentia
fonte
7

Para mostrar apenas a letra da unidade que uso:

            function prompt {(get-location).drive.name+"\...>"}

Então, para voltar ao caminho que uso:

            function prompt {"$pwd>"}
Chris Horan
fonte
5

Esta versão da resposta de Warren Stevens evita o ruidoso "Microsoft.PowerShell.Core \ FileSystem" no caminho se você Set-Locationcompartilha a rede.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
nudl
fonte