Налаштуйте програму Windows Powershell для відображення лише поточного імені папки у запиті оболонки


37

Я використовую Powershell в Windows 7. Як налаштувати Powershell так, щоб він відображав лише поточне ім'я папки (замість повного шляху) у запиті оболонки?

Наприклад, Замість цього C:\folder\directory\name>я хочу name>.

Відповіді:


57

Вам потрібно налаштувати функцію підказок у вашому профілі PowerShell ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); він може бути порожнім або навіть не існувати, якщо ви його ніколи раніше не змінювали.

  1. Відкрийте свій профіль (наприклад, відкрийте згаданий файл або перебуваючи в PowerShell, Notepad $profile)

  2. Додайте до свого профілю таке:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Збережіть профіль

  4. Перезапустіть PowerShell

    За бажанням . Якщо ви отримаєте повідомлення про те, що вам заборонено запускати сценарії, вам потрібно скопіювати / вставити цей рядок у PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    і перезапустити.

Політики виконання Windows PowerShell дозволяють визначати умови, за яких Windows PowerShell завантажує конфігураційні файли та запускає сценарії.

Ви можете встановити політику виконання для локального комп'ютера, для поточного користувача або для певного сеансу. Ви також можете встановити групову політику для встановлення політики виконання комп'ютерів та користувачів.

Джерело: Документація Microsoft


1
Не зовсім правильно. [System.IO.Directory]::GetCurrentDirectory()не відображає поточне розташування powershell, а швидше робочий каталог процесів, які не завжди є однаковими. ЗамінитиGet-Location
zdan

+1, але я б використовував get-location замість GetCurrentDirectory. Пам'ятайте, що PowerShell не завжди означає файлову систему. Використовуючи оснащення реєстру, я міг би використати, cd hkcu:і тепер підказка буде повністю вимкнена.
vcsjones

@Synetech Це поховано досить глибоко у довідці щодо форматування: \
Боб

1
Ви також можете використовувати $PWDзамість дзвінка Get-Location. Напр.function prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey

1
Не потрібно визначати promptу своєму файлі профілю. Він просто повинен бути в межах глобальної сесії. За замовчуванням здається еквівалентним function prompt {"PS " + (Get-Location) + ">"}, тоді як function prompt {""}дає те саме, що і function prompt {"PS>"}. Використовуйте function prompt {" `b"}для отримання порожнього запиту (принаймні візуально ...).
masterxilo

5

В якості додаткової примітки я не міг виконувати команду @ Synetech, поки вперше не створив профіль $.

  1. Відкрийте PowerShell
  2. Введіть $profileі натисніть Enter. Це покаже шлях профілю, на який покладається PowerShell, навіть якщо він не існує (для мене це не було). Мій шлях був іншим, ніж той, який @Synetech розмістив вище.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Мені довелося створити і папку WindowsPowerShell, і файл Microsoft.PowerShell_profile.ps1.

  4. Додайте код @ Synetech та перезапустіть PowerShell.

Примітка:

Якщо ви використовуєте posh-git (який встановлюється під час використання робочого столу GitHub), сценарій @ Synetech замінить posh-git-підказку. Додаткові оперативні сценарії для шикарного-мерзотника тут .


1
Це ж. %userprofile%розширюється доC:\Users\[username]
DavidPostill

@DavidPostill це було моє розуміння, але моя PowerShell не визнала% userprofile% як каталог. Я не вірю, що мій PowerShell налаштований розпізнавати ці шляхи, можливо, через налаштування мережі?
Брайан

2
Синтаксис у PowerShell інший: $Env:userprofileеквівалентноecho %userprofile%
DavidPostill

$ профіль має інше значення в ISE порівняно зі звичайним запитом, можливо, вам доведеться створити 2 файли.
Кріс

3

Змініть підказку, щоб в кінці відображалася поточна папка без повного шляху та не перевищує символ:

Одним із способів може бути:

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

Або:

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

Або:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }

Перша і третя кращі за прийняту відповідь, оскільки вони працюють для мережевих папок. Сплит-Шлях не працюватиме належним чином на шляху, наприклад \\myserver\my\path.
Кріс

2

Я вважав, що це було досить просто - поєднуючи відповідь @ Synetech та інформацію, знайдену в профілях PowerShell . Тому що я новачок в PS. Мої кроки (для vscode):

  1. $ test test-path (у командному рядку PS - чи налаштований профіль?)
  2. new-item -path $ profile -itemtype file -force (припустимо, що відповідь на вищезазначене помилково)
  3. профіль блокнота $ (відкриває блокнот)
  4. вставити

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. збережіть (вам не слід було б вибирати місцеположення, це вже зроблено для вас)
  6. reload vscode - ви, ймовірно, отримаєте повідомлення про запуск сценаріїв (або просто зробіть наступний крок перед перезавантаженням)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (за вашим PS-запитом, з відповіді SuperUse)

  8. перезавантажити vscode

Тож здебільшого відповідь @ Synetech (наголошено), щоб почати легко - особливо крок 2 робить це дуже просто.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.