Configure Windows Powershell para mostrar solo el nombre de la carpeta actual en el indicador del shell

37

Estoy usando Powershell en Windows 7. ¿Cómo configurar Powershell para que solo muestre el nombre de la carpeta actual (en lugar de la ruta completa) en el indicador de shell?

Por ejemplo, en lugar de C:\folder\directory\name>, quiero name>.

Veera
fuente

Respuestas:

57

Debe personalizar la función de solicitud en su perfil de PowerShell ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); puede estar en blanco o incluso no existir si nunca lo ha modificado antes.

  1. Abra su perfil (por ejemplo, abra el archivo mencionado anteriormente o mientras esté en PowerShell Notepad $profile)

  2. Agregue lo siguiente a su perfil:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Guardar el perfil

  4. Reiniciar PowerShell

    Opcional . Si recibe un mensaje que dice que no puede ejecutar scripts, debe copiar / pegar esta línea en PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    y reiniciar.

Las políticas de ejecución de Windows PowerShell le permiten determinar las condiciones bajo las cuales Windows PowerShell carga los archivos de configuración y ejecuta los scripts.

Puede establecer una política de ejecución para la computadora local, para el usuario actual o para una sesión en particular. También puede usar una configuración de directiva de grupo para establecer la directiva de ejecución para computadoras y usuarios.

Fuente: Documentación de Microsoft

Synetech
fuente
1
No del todo bien. [System.IO.Directory]::GetCurrentDirectory()no representa la ubicación actual de powershell, sino el directorio de trabajo del proceso, que no siempre es el mismo. Reemplazar conGet-Location
zdan
+1, pero usaría get-location en lugar de GetCurrentDirectory. Recuerde que PowerShell no siempre significa el sistema de archivos. Usando el complemento de registro, podría usar cd hkcu:y ahora el aviso estaría totalmente apagado.
vcsjones
@Synetech Está enterrado bastante profundo en la ayuda de formato: \
Bob
1
También puede usar en $PWDlugar de llamar Get-Location. Por ejemplofunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey el
1
No tiene que definir prompten su archivo de perfil. Solo tiene que estar en el alcance de la sesión global. El valor predeterminado parece equivalente a function prompt {"PS " + (Get-Location) + ">"}, mientras que function prompt {""}da lo mismo que function prompt {"PS>"}. Use function prompt {" `b"}para obtener un mensaje vacío (al menos visualmente ...).
masterxilo
5

Como nota adicional, no pude hacer el comando de @ Synetech hasta que creé por primera vez el $ profile.

  1. Abra PowerShell
  2. Escriba $profiley presione enter. Esto mostrará la ruta de perfil en la que se basa PowerShell, incluso si no existe (no era para mí). Mi camino era diferente de lo que @Synetech publicó anteriormente.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Tuve que crear tanto la carpeta WindowsPowerShell como el archivo Microsoft.PowerShell_profile.ps1.

  4. Agregue el código de @ Synetech y reinicie PowerShell.

Nota:

Si está usando posh-git (que se instala cuando se usa el escritorio de GitHub), el script de @ Synetech anulará la solicitud de posh-git. Scripts de solicitud adicionales para posh-git aquí .

Bryan
fuente
1
Es lo mismo. %userprofile%se expande aC:\Users\[username]
DavidPostill
@DavidPostill que entendí, pero mi PowerShell no reconoció% userprofile% como un directorio. No creo que mi PowerShell esté personalizado aún para reconocer esas rutas, ¿tal vez debido a la configuración de red?
Bryan
2
La sintaxis es diferente en PowerShell: $Env:userprofilees equivalente aecho %userprofile%
DavidPostill
$ profile tiene un valor diferente en ISE frente a la solicitud regular, es posible que deba crear 2 archivos.
Chris
3

Cambie la solicitud para mostrar la carpeta actual sin ruta completa y mayor que el símbolo al final:

Una forma podría ser:

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

O:

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

O:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }
Jelgab
fuente
El primero y el tercero son mejores que la respuesta aceptada, ya que funcionan para carpetas de red. Split-Path no funcionará correctamente en una ruta como \\myserver\my\path.
Chris
2

Descubrí que esto era bastante fácil: combinaba la respuesta de @ Synetech y la información encontrada en los perfiles de PowerShell . Porque soy un novato en PS. Mis pasos (para vscode):

  1. test-path $ profile (en el símbolo del sistema de PS: ¿hay un perfil configurado?)
  2. new-item -path $ profile -itemtype file -force (suponiendo que la respuesta a lo anterior es falsa)
  3. notepad $ profile (abre el bloc de notas)
  4. pegar en

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. guardar (no debería tener que elegir una ubicación, ya está hecho para usted)
  6. recargar vscode: probablemente recibirá un mensaje sobre la ejecución de scripts (o simplemente haga el siguiente paso antes de volver a cargar)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (en su solicitud de PS, de la respuesta SuperUse)

  8. recargar vscode

Así que, en su mayoría, la respuesta de @ Synetech (upvoted) con un poco para comenzar fácilmente, especialmente el paso 2 lo hace muy fácil.

marca
fuente
0

La siguiente línea única funciona bien para mí

(Get-Location | Get-Item) .Nombre

Cañón serio
fuente
esa no era la pregunta - ver arriba la respuesta correcta de Jelgab
hfrmobile