Windows PowerShell: modification de l'invite de commande


85

À l'aide de Windows PowerShell, comment modifier l'invite de commande?

Par exemple, l'invite par défaut dit

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

Je souhaite personnaliser cette chaîne.

Réponses:


107

Mettez simplement la fonction promptdans votre profil PowerShell ( notepad $PROFILE), par exemple:

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

ou coloré:

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

2
notepad $PROFILEne fonctionne pas dans Windows 7 à partir d'une invite d'administration
PowerShell

18
Ahh, je vois que vous devez d'abord créer le profil:new-item -itemtype file -path $profile -force
jcollum

4
Remarque: vous pouvez simplement coller la fonction d'invite dans PowerShell pour modifier le chemin de l'invite au lieu d'enregistrer la fonction dans votre profil, mais vous devrez le faire à chaque fois que vous lancerez PowerShell.
Larry Battle

3
Vous devez également exécuter Powershell en tant qu'administrateur et le faire Set-ExecutionPolicy RemoteSigned.
qed

1
@qed Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedsi vous ne souhaitez modifier que pour l'utilisateur actuel ou ne pouvez pas exécuter en tant qu'administrateur
cz le

21

Lié à un commentaire sur la réponse d'Ocaso Protal , ce qui suit est nécessaire pour Windows Server 2012 ainsi que Windows 7 (dans une fenêtre PowerShell):

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

Je suggérerais ce qui suit comme invite si vous exécutez avec plusieurs noms d'utilisateur (par exemple vous-même + une connexion de production):

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

(Le mérite revient à David I. McIntosh pour celui-ci.)


1
Vous devez également exécuter Powershell en tant qu'administrateur et le faire Set-ExecutionPolicy RemoteSigned.
qed

11

À l'invite, j'aime un horodatage actuel et des lettres de lecteur résolues pour les lecteurs réseau. Pour le rendre plus lisible, je l'ai mis en deux lignes, et j'ai joué un peu avec les couleurs.

Avec CMD, j'ai fini avec

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

Pour PowerShell, j'ai obtenu le même résultat avec:

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

Ce qui est un peu plus lisible :-)

BTW:

  • Je préfère powershell_ise.exe $PROFILEau bloc-notes (stupide) .
  • Si vous souhaitez déboguer votre invite () avec des points d'arrêt, vous devez renommer la fonction d'invite en autre chose (ou l'essayer dans un autre fichier). Sinon, vous risquez de vous retrouver dans une boucle: lorsque vous arrêtez le débogage, prompt () est à nouveau appelé et vous vous arrêtez à nouveau au point d'arrêt. Assez irritant, au début ...

Exactement ce que je cherchais!
Glen Little

8

Si vous voulez le faire vous-même, alors la réponse d'Ocaso Protal est la voie à suivre. Mais si vous êtes paresseux comme moi et que vous voulez juste quelque chose à faire pour vous, alors je recommande vivement le package Pshazz de Luke Sampson .

Juste pour vous montrer à quel point vous pouvez être paresseux, je vais vous fournir un bref tutoriel.

  • Installez Pshazz avec Scoop ( scoop install pshazz)
  • Utilisez un joli thème prédéfini ( pshazz use msys)
  • Boire de la bière (racine)

Pshazz vous permet également de créer vos propres thèmes, ce qui est aussi simple que de configurer un fichier JSON. Regardez le mien pour voir à quel point c'est facile!


7

Pour afficher simplement la lettre de lecteur que j'utilise:

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

Ensuite, pour revenir au chemin que j'utilise:

            function prompt {"$pwd>"}

5

Cette version de la réponse de Warren Stevens évite le bruyant «Microsoft.PowerShell.Core \ FileSystem» dans le chemin si vous accédez Set-Locationaux partages réseau.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.