PowerShell reemplaza $env:USERPROFILE en el mensaje

PowerShell reemplaza $env:USERPROFILE en el mensaje

Me refiero a entrar en mi mensaje de PS 5.1.

~\Documents

en lugar de

C:\Users\USER1\Documents

Pero al probar uno de los "bloques de construcción" aparece un error

> $($executionContext.SessionState.Path.CurrentLocation) -replace $env:USERPROFILE, '~'
The regular expression pattern C:\Users\USER1 is not valid.
At line:1 char:3
...

Quiero incluir esto en

$ESC = [char]27
$BLUE="$ESC[1;34m"
$RESET="$ESC[0m"
function prompt  
{  
    $cwd = $($executionContext.SessionState.Path.CurrentLocation) ;
    # $my_new_var=USE THE REPLACING COMMAND
    "$BLUE$my_new_var$('>' * ($nestedPromptLevel + 1)) $RESET"  
}

¿Cómo debo escapar $env:USERPROFILEpara que esto funcione? ¿Funcionaría eso dentro de mi prompt?

Respuesta1

Esto hará el reemplazo que estás buscando:

($executionContext.SessionState.Path.CurrentLocation).ToString().Replace($env:USERPROFILE, '~')

Respuesta2

Tal vez desee utilizar cadenas de formato para expandir la variable dentro del reemplazo de Regex:

$($executionContext.SessionState.Path.CurrentLocation) -replace ("{0}" -f $env:USERPROFILE), '~'

Respuesta3

Podría tener problemas si se mueve por encima de su directorio $HOME. Si siempre quieres el último elemento de la ruta, usaría uno de los siguientes:

'~\{0} -f ($executionContext.SessionState.Path.CurrentLocation).Path.Split('\')[-1]
'~\{0}' -f (Split-Path ($executionContext.SessionState.Path.CurrentLocation).Path -Leaf)

información relacionada