Windows PowerShell: Ändern der Eingabeaufforderung

85

Wie ändere ich unter Windows PowerShell die Eingabeaufforderung?

In der Standardaufforderung heißt es beispielsweise

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

Ich möchte diese Zeichenfolge anpassen.

Sashang
quelle

Antworten:

107

Fügen Sie die Funktion einfach promptin Ihr PowerShell-Profil ( notepad $PROFILE) ein, z.

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

oder farbig:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}
Ocaso Protal
quelle
2
notepad $PROFILEfunktioniert nicht in Windows 7 über eine Admin-Powershell-Eingabeaufforderung
jcollum
18
Ahh, ich sehe, dass Sie zuerst das Profil erstellen müssen:new-item -itemtype file -path $profile -force
JCollum
4
Hinweis: Sie können die Eingabeaufforderungsfunktion einfach in Powershell einfügen, um den Eingabeaufforderungspfad zu ändern, anstatt die Funktion in Ihrem Profil zu speichern. Dies müssen Sie jedoch jedes Mal tun, wenn Sie Powershell starten.
Larry Battle
3
Sie müssen Powershell auch als Administrator ausführen und dies tun Set-ExecutionPolicy RemoteSigned.
Qed
1
@qed, Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedwenn Sie nur für den aktuellen Benutzer ändern möchten oder nicht als Administrator ausgeführt werden können.
cz
21

Im Zusammenhang mit einem Kommentar zur Antwort von Ocaso Protal wird für Windows Server 2012 sowie Windows 7 (in einem PowerShell-Fenster) Folgendes benötigt:

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

Ich würde Folgendes als Eingabeaufforderung vorschlagen, wenn Sie mit mehreren Benutzernamen (z. B. sich selbst + einem Produktions-Login) arbeiten:

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

(Gutschrift geht an David I. McIntosh für diesen einen.)

Warren Stevens
quelle
1
Sie müssen Powershell auch als Administrator ausführen und dies tun Set-ExecutionPolicy RemoteSigned.
Qed
11

An der Eingabeaufforderung gefällt mir ein aktueller Zeitstempel und aufgelöste Laufwerksbuchstaben für Netzwerklaufwerke. Um es besser lesbar zu machen, habe ich es in zwei Zeilen eingefügt und ein bisschen mit Farben gespielt.

Mit CMD endete ich mit

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

Für PowerShell habe ich das gleiche Ergebnis erzielt mit:

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

Welches ist etwas besser lesbar :-)

Übrigens:

  • Ich bevorzuge powershell_ise.exe $PROFILEanstelle von (dummem) Notizblock .
  • Wenn Sie Ihre prompt () mit Haltepunkten debuggen möchten, sollten Sie die prompt-Funktion in etwas anderes umbenennen (oder es in einer anderen Datei versuchen). Andernfalls könnten Sie in eine Schleife geraten: Wenn Sie das Debuggen beenden, wird prompt () erneut aufgerufen und Sie stoppen erneut am Haltepunkt. Anfangs ziemlich irritierend ...
Wissenswertes Codierer
quelle
Genau das, wonach ich gesucht habe!
Glen Little
8

Wenn Sie es selbst tun möchten, ist die Antwort von Ocaso Protal der richtige Weg. Aber wenn Sie so faul sind wie ich und nur etwas für Sie tun möchten, dann empfehle ich das Pshazz-Paket von Luke Sampson .

Um Ihnen zu zeigen, wie faul Sie sein können, werde ich ein kurzes Tutorial bereitstellen.

  • Installieren Sie Pshazz mit Scoop ( scoop install pshazz)
  • Verwenden Sie ein schönes vordefiniertes Thema ( pshazz use msys)
  • Bier (Wurzelbier) trinken

Mit Pshazz können Sie auch eigene Themen erstellen. Dies ist so einfach wie das Konfigurieren einer JSON-Datei. Schauen Sie sich meine an, um zu sehen, wie einfach es ist!

Fomentia
quelle
6

Um nur den Laufwerksbuchstaben anzuzeigen, den ich verwende:

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

Um dann zu dem Pfad zurückzukehren, den ich benutze:

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

Diese Version der Antwort von Warren Stevens vermeidet das laute "Microsoft.PowerShell.Core \ FileSystem" im Pfad, wenn Sie Set-LocationNetzwerkfreigaben verwenden.

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