Konfigurieren Sie die Windows PowerShell so, dass nur der aktuelle Ordnername in der Shell-Eingabeaufforderung angezeigt wird

37

Ich verwende Powershell in Windows 7. Wie konfiguriere ich Powershell so, dass nur der aktuelle Ordnername (anstelle des vollständigen Pfads) in der Shell-Eingabeaufforderung angezeigt wird?

Zum Beispiel C:\folder\directory\name>möchte ich statt name>.

Veera
quelle

Antworten:

57

Sie müssen die Eingabeaufforderungsfunktion in Ihrem PowerShell-Profil anpassen ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1). Es kann leer oder gar nicht vorhanden sein, wenn Sie es noch nie zuvor geändert haben.

  1. Öffnen Sie Ihr Profil (z. B. die oben genannte Datei oder in PowerShell Notepad $profile).

  2. Fügen Sie Ihrem Profil Folgendes hinzu:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Speichern Sie das Profil

  4. Starten Sie PowerShell neu

    Optional . Wenn Sie eine Meldung erhalten, dass Sie keine Skripte ausführen dürfen, müssen Sie diese Zeile in PowerShell kopieren / einfügen:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    und neu starten.

Mithilfe von Windows PowerShell-Ausführungsrichtlinien können Sie die Bedingungen festlegen, unter denen Windows PowerShell Konfigurationsdateien lädt und Skripts ausführt.

Sie können eine Ausführungsrichtlinie für den lokalen Computer, den aktuellen Benutzer oder für eine bestimmte Sitzung festlegen. Sie können auch eine Gruppenrichtlinieneinstellung verwenden, um Ausführungsrichtlinien für Computer und Benutzer festzulegen.

Quelle: Microsoft-Dokumentation

Synetech
quelle
1
Nicht ganz richtig. [System.IO.Directory]::GetCurrentDirectory()Stellt nicht den aktuellen Speicherort von Powershell dar, sondern das Prozessarbeitsverzeichnis, das nicht immer identisch ist. Ersetzen durchGet-Location
zdan
+1, aber ich würde statt get-location verwenden GetCurrentDirectory. Denken Sie daran, dass PowerShell nicht immer das Dateisystem bedeutet. Mit dem Registry-Snap-In könnte ich das nutzen cd hkcu:und jetzt wäre die Eingabeaufforderung total ausgeschaltet.
Vcsjones
@Synetech Es ist ziemlich tief in der Formatierungshilfe vergraben : \
Bob
1
Sie können auch verwenden, $PWDanstatt anzurufen Get-Location. ZBfunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey
1
Sie müssen nicht promptin Ihrer Profildatei definieren . Es muss nur im globalen Sitzungsbereich liegen. Der Standardwert scheint äquivalent zu zu sein function prompt {"PS " + (Get-Location) + ">"}, während er function prompt {""}den gleichen Wert wie angibt function prompt {"PS>"}. Verwenden Sie function prompt {" `b"}diese Option , um eine leere Eingabeaufforderung zu erhalten (zumindest visuell ...).
Masterxilo
5

Als zusätzliche Anmerkung konnte ich den Befehl @ Synetech erst ausführen, nachdem ich das $ -Profil erstellt hatte.

  1. Öffnen Sie PowerShell
  2. Tippen Sie $profileund drücken Sie die Eingabetaste. Dadurch wird der Profilpfad angezeigt, auf den sich PowerShell stützt, auch wenn er nicht vorhanden ist (für mich nicht). Mein Pfad war anders als der, den @Synetech oben gepostet hat.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Ich musste sowohl den WindowsPowerShell-Ordner als auch die Datei Microsoft.PowerShell_profile.ps1 erstellen.

  4. Fügen Sie @ Synetechs Code hinzu und starten Sie PowerShell neu.

Hinweis:

Wenn Sie posh-git verwenden (das bei Verwendung des GitHub-Desktops installiert wird), überschreibt das Skript von @ Synetech die Eingabeaufforderung von posh-git. Zusätzliche Eingabeaufforderungsskripte für posh-git hier .

Bryan
quelle
1
Es ist das gleiche. %userprofile%erweitert aufC:\Users\[username]
DavidPostill
@DavidPostill das war mein Verständnis, aber meine PowerShell hat% userprofile% nicht als Verzeichnis erkannt. Ich glaube nicht, dass meine PowerShell angepasst wurde, um diese Pfade zu erkennen, möglicherweise aufgrund der Netzwerkeinstellungen.
Bryan
2
Die Syntax in PowerShell unterscheidet sich: $Env:userprofileentsprichtecho %userprofile%
DavidPostill
$ profile hat in ISE einen anderen Wert als die reguläre Eingabeaufforderung. Möglicherweise müssen Sie zwei Dateien erstellen.
Chris
3

Ändern Sie die Eingabeaufforderung, um den aktuellen Ordner ohne vollständigen Pfad und größer als das Symbol am Ende anzuzeigen:

Ein Weg könnte sein:

Function Prompt { "$( ( get-item $pwd ).Name )>" }

Oder:

Function Prompt { "$( Split-Path -leaf -path (Get-Location) )>" }

Oder:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }
Jelgab
quelle
Die erste und dritte Antwort sind besser als die akzeptierte, da sie für Netzwerkordner funktionieren. Split-Path funktioniert auf einem Pfad wie dem nicht richtig \\myserver\my\path.
Chris
2

Ich fand das ziemlich einfach - indem ich die Antwort von @ Synetech und die Informationen aus PowerShell-Profilen kombinierte . Weil ich ein Neuling bei PS bin. Meine Schritte (für vscode):

  1. test-path $ profile (in der PS-Eingabeaufforderung - ist ein Profil eingerichtet?)
  2. new-item -path $ profile -itemtype file -force (unter der Annahme, dass die Antwort auf das oben Gesagte falsch ist)
  3. notepad $ profile (öffnet den notepad)
  4. einfügen

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. speichern (du solltest keinen Ort auswählen müssen, es ist bereits für dich erledigt)
  6. vscode neu laden - Sie werden wahrscheinlich eine Nachricht über das Ausführen von Skripten erhalten (oder machen Sie einfach den nächsten Schritt vor dem erneuten Laden)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (an Ihrer PS-Eingabeaufforderung aus der SuperUse-Antwort)

  8. vscode neu laden

Also meistens @ Synetechs Antwort (upvoted) mit ein bisschen Starthilfe - besonders Schritt 2 macht dies sehr einfach.

Kennzeichen
quelle
0

Die folgende einzelne Zeile funktioniert gut für mich

(Get-Location | Get-Item) .Name

Cannon Earnest
quelle
das war nicht die frage
hfrmobile