PowerShell ersetzt $env:USERPROFILE in der Eingabeaufforderung

PowerShell ersetzt $env:USERPROFILE in der Eingabeaufforderung

Ich möchte in meine PS 5.1-Eingabeaufforderung gelangen

~\Documents

anstatt

C:\Users\USER1\Documents

Aber beim Ausprobieren eines der "Bausteine" erhalte ich eine Fehlermeldung

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

Ich möchte dies einschließen in

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

Wie muss ich entkommen, $env:USERPROFILEdamit dies funktioniert? Würde das in meinem funktionieren prompt?

Antwort1

Dadurch wird der gesuchte Ersatz durchgeführt:

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

Antwort2

Vielleicht möchten Sie Formatzeichenfolgen verwenden, um die Variable innerhalb von Regex-Ersetzungen zu erweitern:

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

Antwort3

Sie könnten in Schwierigkeiten geraten, wenn Sie sich über Ihr $HOME-Verzeichnis hinaus bewegen. Wenn Sie immer das letzte Element des Pfads möchten, würde ich eine der folgenden Möglichkeiten verwenden:

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

verwandte Informationen