Configurez Windows Powershell pour afficher uniquement le nom du dossier actuel dans l'invite du shell

37

J'utilise Powershell dans Windows 7. Comment configurer Powershell pour qu'il affiche uniquement le nom du dossier actuel (au lieu du chemin complet) dans l'invite du shell?

Par exemple, au lieu de C:\folder\directory\name>, je veux name>.

Veera
la source

Réponses:

57

Vous devez personnaliser la fonction d'invite dans votre profil PowerShell ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); il peut être vierge ou même inexistant si vous ne l'avez jamais modifié auparavant.

  1. Ouvrez votre profil (par exemple, ouvrez le fichier susmentionné ou dans PowerShell, Notepad $profile)

  2. Ajoutez ce qui suit à votre profil:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Enregistrez le profil

  4. Redémarrez PowerShell

    Facultatif . Si vous obtenez un message indiquant que vous n'êtes pas autorisé à exécuter des scripts, vous devez copier / coller cette ligne dans PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    et redémarrez.

Les stratégies d'exécution de Windows PowerShell vous permettent de déterminer les conditions dans lesquelles Windows PowerShell charge les fichiers de configuration et exécute les scripts.

Vous pouvez définir une stratégie d'exécution pour l'ordinateur local, pour l'utilisateur actuel ou pour une session particulière. Vous pouvez également utiliser un paramètre de stratégie de groupe pour définir la stratégie d'exécution pour les ordinateurs et les utilisateurs.

Source: documentation Microsoft

Synetech
la source
1
Pas tout à fait juste. [System.IO.Directory]::GetCurrentDirectory()ne représente pas l'emplacement actuel de powershell, mais plutôt le répertoire de travail du processus, qui ne sont pas toujours les mêmes. Remplacer parGet-Location
zdan
+1, mais j'utiliserais get-location au lieu de GetCurrentDirectory. N'oubliez pas que PowerShell ne signifie pas toujours le système de fichiers. En utilisant le composant logiciel enfichable de registre, je pouvais utiliser cd hkcu:et maintenant l'invite serait totalement désactivée.
vcsjones
@Synetech Il est enterré assez profondément dans l'aide au formatage: \
Bob
1
Vous pouvez également utiliser $PWDau lieu d'appeler Get-Location. Par exemplefunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey
1
Vous n'avez pas à définir promptdans votre fichier de profil. Il doit juste être dans la portée de la session globale. La valeur par défaut semble équivalente à function prompt {"PS " + (Get-Location) + ">"}, tandis que function prompt {""}la même valeur que function prompt {"PS>"}. Utilisez function prompt {" `b"}pour obtenir une invite vide (au moins visuellement ...).
masterxilo
5

En plus, je n'ai pas pu exécuter la commande de @ Synetech avant d'avoir créé le profil $.

  1. Ouvrez PowerShell
  2. Tapez $profileet appuyez sur Entrée. Cela affichera le chemin de profil sur lequel PowerShell s'appuie, même s'il n'existe pas (ce n'était pas le cas pour moi). Mon chemin était différent de celui indiqué par @Synetech ci-dessus.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. J'ai dû créer à la fois le dossier WindowsPowerShell et le fichier Microsoft.PowerShell_profile.ps1.

  4. Ajoutez le code de @ Synetech et redémarrez PowerShell.

Remarque:

Si vous utilisez posh-git (qui est installé lors de l'utilisation du bureau GitHub), le script de @ Synetech remplacera l'invite posh-git. Scripts d'invite supplémentaires pour posh-git ici .

Bryan
la source
1
C'est le même. %userprofile%se développe àC:\Users\[username]
DavidPostill
@DavidPostill, c'était ma compréhension, mais mon PowerShell n'a pas reconnu% userprofile% comme répertoire. Je ne crois pas que mon PowerShell soit encore personnalisé pour reconnaître ces chemins, peut-être en raison des paramètres réseau?
Bryan
2
La syntaxe est différente dans PowerShell: $Env:userprofileéquivaut àecho %userprofile%
DavidPostill
$ profile a une valeur différente dans ISE par rapport à l'invite régulière, vous devrez peut-être créer 2 fichiers.
Chris
3

Modifiez l'invite pour afficher le dossier actuel sans chemin complet et symbole supérieur à à la fin:

Une façon pourrait être:

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

Ou:

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

Ou:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }
Jelgab
la source
Le premier et le troisième sont meilleurs que la réponse acceptée dans la mesure où ils fonctionnent pour les dossiers réseau. Split-Path ne fonctionnera pas correctement sur un chemin comme \\myserver\my\path.
Chris
2

J'ai trouvé que c'était assez facile - combinant la réponse de @ Synetech et les informations trouvées dans les profils PowerShell . Parce que je suis un débutant sur PS. Mes étapes (pour vscode):

  1. test-path $ profile (dans l'invite de commande PS - y a-t-il un profil configuré?)
  2. new-item -path $ profile -itemtype file -force (en supposant que la réponse à ce qui précède est fausse)
  3. bloc-notes profil $ (ouvre le bloc-notes)
  4. coller

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. enregistrer (vous ne devriez pas avoir à choisir un emplacement, c'est déjà fait pour vous)
  6. recharger vscode - vous obtiendrez probablement un message sur l'exécution de scripts (ou faites simplement l'étape suivante avant de recharger)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (à votre invite PS, à partir de la réponse SuperUse)

  8. recharger vscode

Donc, surtout la réponse de @ Synetech (votée) avec un peu pour commencer facilement - en particulier l'étape 2 rend cela très facile.

marque
la source
0

La ligne unique ci-dessous fonctionne bien pour moi

(Get-Location | Get-Item) .Name

Cannon Earnest
la source
ce n'était pas la question - voir ci-dessus la bonne réponse de Jelgab
hfrmobile