Windows PowerShell: modifica del prompt dei comandi


86

Utilizzando Windows PowerShell, come si modifica il prompt dei comandi?

Ad esempio, il prompt predefinito dice

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

Voglio personalizzare quella stringa.

Risposte:


110

Basta inserire la funzione promptnel tuo profilo PowerShell ( notepad $PROFILE), ad esempio:

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

o colorato:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}

3
notepad $PROFILEnon funziona in Windows 7 da un prompt di PowerShell di amministratore
jcollum

19
Ahh, vedo che devi prima creare il profilo:new-item -itemtype file -path $profile -force
jcollum

4
Nota: puoi semplicemente incollare la funzione prompt in PowerShell per modificare il percorso del prompt invece di salvare la funzione nel tuo profilo, ma dovrai farlo ogni volta che avvii PowerShell.
Larry Battle

3
È inoltre necessario eseguire Powershell come amministratore e farlo Set-ExecutionPolicy RemoteSigned.
qed

1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedse desideri modificare solo per l'utente corrente o non puoi eseguire come amministratore.
cz

21

In relazione a un commento alla risposta di Ocaso Protal , è necessario quanto segue per Windows Server 2012 e Windows 7 (in una finestra di PowerShell):

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

Suggerirei quanto segue come prompt se esegui con più nomi utente (ad esempio te stesso + un accesso di produzione):

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

(Il merito va a David I. McIntosh per questo.)


1
È inoltre necessario eseguire Powershell come amministratore e farlo Set-ExecutionPolicy RemoteSigned.
qed

11

Al prompt, mi piace un timestamp corrente e lettere di unità risolte per le unità di rete. Per renderlo più leggibile, l'ho messo su due righe e ho giocato un po 'con i colori.

Con CMD, ho finito con

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

Per PowerShell, ho ottenuto lo stesso risultato 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 " "
}

Che è un po 'più leggibile :-)

BTW:

  • Preferisco powershell_ise.exe $PROFILEinvece di (stupido) Blocco note .
  • Se ti piace eseguire il debug del tuo prompt () con punti di interruzione, dovresti rinominare la funzione prompt in qualcos'altro (o provarlo in un altro file). Altrimenti potresti finire in un ciclo: quando interrompi il debug, prompt () viene chiamato di nuovo e ti fermi al punto di interruzione, di nuovo. Abbastanza irritante, all'inizio ...

Proprio quello che stavo cercando!
Glen Little,

8

Se vuoi farlo da solo, la risposta di Ocaso Protal è la strada da percorrere. Ma se sei pigro come me e vuoi solo qualcosa che lo faccia per te, allora consiglio vivamente il pacchetto Pshazz di Luke Sampson .

Solo per mostrarti quanto puoi essere pigro, ti fornirò un breve tutorial.

  • Installa Pshazz con Scoop ( scoop install pshazz)
  • Usa un bel tema predefinito ( pshazz use msys)
  • Bevi birra (radice)

Pshazz ti consente anche di creare i tuoi temi, che è semplice come configurare un file JSON. Dai un'occhiata al mio per vedere quanto è facile!


7

Per mostrare solo la lettera di unità che uso:

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

Quindi per tornare al percorso che uso:

            function prompt {"$pwd>"}

5

Questa versione della risposta di Warren Stevens evita il rumoroso "Microsoft.PowerShell.Core \ FileSystem" nel percorso se si tratta Set-Locationdi condivisioni di rete.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.