Windows PowerShell: cambiar el símbolo del sistema

85

Con Windows PowerShell, ¿cómo cambio el símbolo del sistema?

Por ejemplo, el mensaje predeterminado dice

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

Quiero personalizar esa cadena.

Sashang
fuente

Respuestas:

107

Simplemente coloque la función prompten su perfil de PowerShell ( notepad $PROFILE), por ejemplo:

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

o de color:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}
Ocaso Protal
fuente
2
notepad $PROFILEno funciona en Windows 7 desde un indicador de administración de powershell
jcollum
18
Ahh, veo que primero debes crear el perfil:new-item -itemtype file -path $profile -force
jcollum
4
Nota: puede simplemente pegar la función de solicitud en powershell para cambiar la ruta de solicitud en lugar de guardar la función en su perfil, pero tendrá que hacer esto cada vez que inicie powershell.
Larry Battle
3
También debe ejecutar Powershell como administrador y hacerlo Set-ExecutionPolicy RemoteSigned.
qed
1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedsi solo desea cambiar para el usuario actual o no puede ejecutar como administrador.
cz
21

En relación con un comentario a la respuesta de Ocaso Protal , se necesita lo siguiente para Windows Server 2012 y Windows 7 (en una ventana de PowerShell):

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

Sugeriría lo siguiente como aviso si ejecuta con varios nombres de usuario (por ejemplo, usted mismo + un inicio de sesión de producción):

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

(El crédito es para David I. McIntosh por este).

Warren Stevens
fuente
1
También debe ejecutar Powershell como administrador y hacerlo Set-ExecutionPolicy RemoteSigned.
qed
11

Cuando se le solicita, me gusta una marca de tiempo actual y letras de unidad resueltas para unidades de red. Para hacerlo más legible, lo puse en dos líneas y jugué un poco con los colores.

Con CMD, terminé con

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

Para PowerShell, obtuve el mismo resultado con:

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 " "
}

Que es un poco más legible :-)

Por cierto:

  • Prefiero en powershell_ise.exe $PROFILElugar del (tonto) Bloc de notas .
  • Si desea depurar su prompt () con puntos de interrupción, debe cambiar el nombre de la función prompt a cualquier otra cosa (o intentarlo en otro archivo). De lo contrario, podría terminar en un bucle: cuando detiene la depuración, se llama de nuevo a prompt () y se detiene nuevamente en el punto de interrupción. Bastante irritante, al principio ...
Codificador de trivia
fuente
¡Justo lo que estaba buscando!
Glen Little
8

Si quieres hacerlo tú mismo, entonces la respuesta de Ocaso Protal es el camino a seguir. Pero si eres perezoso como yo y solo quieres algo que lo haga por ti, te recomiendo encarecidamente el paquete Pshazz de Luke Sampson .

Solo para mostrarte lo vago que puedes ser, te daré un tutorial rápido.

  • Instalar Pshazz con Scoop ( scoop install pshazz)
  • Usa un bonito tema predefinido ( pshazz use msys)
  • Beber cerveza (de raíz)

Pshazz también te permite crear tus propios temas, que es tan simple como configurar un archivo JSON. ¡Mira el mío para ver lo fácil que es!

Fomentia
fuente
7

Para mostrar la letra de la unidad que utilizo:

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

Luego, para volver a la ruta que uso:

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

Esta versión de la respuesta de Warren Stevens evita el ruidoso "Microsoft.PowerShell.Core \ FileSystem" en la ruta de acceso Set-Locationa recursos compartidos de red.

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