Windows PowerShell: Ændring af kommandoprompten

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan ændrer jeg kommandoprompten ved hjælp af Windows PowerShell?


For eksempel siger standardprompten


PS C:Documents and SettingsgovendesMy Documents>


Jeg vil gerne tilpasse den pågældende streng.

Bedste reference


Bare sæt funktionen prompt i din PowerShell-profil (notepad $PROFILE), for eksempel:


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


eller farvet:


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

Andre referencer 1


I forbindelse med en kommentar til Ocaso Protals svar er følgende nødvendigt for Windows Server 2012 samt Windows   7 (i et PowerShell-vindue):


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


Jeg foreslår følgende som en prompt, hvis du kører med flere brugernavne (f.eks. Dig selv + et produktions login):


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


(Kredit går til David I. McIntosh for denne.)

Andre referencer 2


Hvis du vil gøre det selv, så er Ocaso Protals svar den rigtige vej. Men hvis du er lat som mig og bare vil have noget til at gøre det for dig, så anbefaler jeg stærkt Luke Sampson s Pshazz-pakke. [19]


Bare for at vise dig, hvor doven du kan være, vil jeg give en hurtig vejledning.



  • Installer Pshazz med Scoop (scoop install pshazz)

  • Brug et godt foruddefineret tema (pshazz use msys)

  • Drikke (root) øl



Pshazz giver dig også mulighed for at oprette dine egne temaer, hvilket er lige så enkelt som at konfigurere en JSON-fil. Tjek min for at se, hvor nemt det er! [20] [21]

Andre referencer 3


Denne version af Warren Stevens 'svar undgår det støjende' Microsoft.PowerShell.Core \ FileSystem 'i stien, hvis du Set-Location til at dele netværk.


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

Andre referencer 4


I det øjeblik jeg kan lide en aktuelle tidsstempel og løst drevbogstaver til netværksdrev. For at gøre det mere læseligt, satte jeg det i to linjer og spillede lidt med farver.


Med CMD, endte jeg med


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


For PowerShell fik jeg det samme resultat med:


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


Hvilket er lidt mere læseligt :-)


BTW:



  • Jeg foretrækker powershell\_ise.exe $PROFILE i stedet for (dumt) Notesblok.

  • Hvis du gerne vil debugere din prompt () med breakpoints, skal du omdøbe prompt-funktionen til noget andet (eller prøv det i en anden fil). Ellers kan du ende i en loop: Når du stopper debugging, kaldes prompt () igen og du stopper ved breakpoint igen. Ganske irriterende, først ...


Andre referencer 5


For kun at vise det drevbogstav, jeg bruger: [23]


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


Så vende tilbage til stien jeg bruger:


            function prompt {"$pwd>"}