Windows PowerShell: zmiana wiersza polecenia


85

Jak za pomocą programu Windows PowerShell zmienić wiersz polecenia?

Na przykład domyślny monit mówi

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

Chcę dostosować ten ciąg.

Odpowiedzi:


107

Po prostu umieść funkcję promptw swoim profilu PowerShell ( notepad $PROFILE), np:

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

lub kolorowe:

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

2
notepad $PROFILEnie działa w systemie Windows 7 z wiersza polecenia administratora programu PowerShell
jcollum,

18
Ahh, widzę, że najpierw musisz utworzyć profil:new-item -itemtype file -path $profile -force
jcollum

4
Uwaga: Możesz po prostu wkleić funkcję podpowiedzi w PowerShell, aby zmienić ścieżkę zachęty zamiast zapisywać funkcję w swoim profilu, ale będziesz musiał to robić za każdym razem, gdy uruchamiasz PowerShell.
Larry Battle

3
Musisz także uruchomić Powershell jako administrator i to zrobić Set-ExecutionPolicy RemoteSigned.
okazania

1
@qed, Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedjeśli chcesz zmienić tylko dla bieżącego użytkownika lub nie możesz działać jako administrator.
cz

21

W związku z komentarzem do odpowiedzi Ocaso Protal , potrzebne są następujące elementy dla systemu Windows Server 2012, a także Windows 7 (w oknie PowerShell):

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

Sugerowałbym następujące podpowiedź, jeśli uruchamiasz z wieloma nazwami użytkowników (np. Ty + login produkcyjny):

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

(To zasługa Davida I. McIntosha).


1
Musisz także uruchomić Powershell jako administrator i to zrobić Set-ExecutionPolicy RemoteSigned.
okazania

11

Po monicie podoba mi się aktualna sygnatura czasowa i rozwiązane litery dysków dla dysków sieciowych. Aby było bardziej czytelne, umieściłem to w dwóch wierszach i trochę pobawiłem się kolorami.

Z CMD skończyłem z

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

W przypadku PowerShell otrzymałem ten sam wynik z:

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

Co jest trochę bardziej czytelne :-)

BTW:

  • Wolę powershell_ise.exe $PROFILEzamiast (głupiego) Notatnika .
  • Jeśli chcesz debugować swoją prompt () za pomocą punktów przerwania, powinieneś zmienić nazwę funkcji prompt na cokolwiek innego (lub wypróbować ją w innym pliku). W przeciwnym razie możesz skończyć w pętli: kiedy zatrzymasz debugowanie, ponownie wywoływana jest prompt () i ponownie zatrzymasz się w punkcie przerwania. Na początku dość irytujące ...

Właśnie tego szukałem!
Glen Little

8

Jeśli chcesz to zrobić sam, odpowiedz Ocaso Protal jest do zrobienia. Ale jeśli jesteś leniwy jak ja i po prostu chcesz coś zrobić za Ciebie, to bardzo polecam pakiet Pshazz Luke'a Sampsona .

Aby pokazać, jak bardzo możesz być leniwy, przedstawię krótki samouczek.

  • Zainstaluj Pshazz za pomocą Scoop ( scoop install pshazz)
  • Użyj ładnego, wstępnie zdefiniowanego motywu ( pshazz use msys)
  • Pij (korzenne) piwo

Pshazz umożliwia również tworzenie własnych motywów, co jest tak proste, jak konfiguracja pliku JSON. Zajrzyj do mojego, aby zobaczyć, jakie to proste!


7

Aby pokazać tylko literę dysku, której używam:

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

Następnie, aby powrócić do ścieżki, której używam:

            function prompt {"$pwd>"}

5

Ta wersja odpowiedzi Warrena Stevensa pozwala uniknąć hałaśliwego „Microsoft.PowerShell.Core \ FileSystem” na ścieżce dostępu Set-Locationdo udziałów sieciowych.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.