Sometime ago I wrote a Linux lookalike prompt. Since then, I’ve continued to modify it as I decided it needed changes. Today, I have a newer version, so I figured I should drop it here, as I have previously.
The difference in this version is that it adds a / between the c (C:\ drive) and ~ when I’m in my “C:\users\tommymaynard” directory, or somewhere further nested in this directory. So yeah, as of today, Monday, September 19, 2016, this is the newest version.
So you can see it before you buy it — it’s actually free — here’s a few examples of what the prompt will look like based on your location within the file system. It updates the ConsoleHost and ISE’s Window Title, too. Bonus.
# C drive: C:\ [tommymaynard@testsrv01 c/]$ # WSMan drive: WSMan:\ [tommymaynard@testsrv01 wsman/]$ # WSMan localhost: WSMan:\localhost [tommymaynard@testsrv01 wsman/localhost]$ # Users folder: C:\Users [tommymaynard@testsrv01 c/users]$ # Profile folder: C:\Users\tommymaynard [tommymaynard@testsrv01 c/~]$ # Desktop folder: C:\Users\tommymaynard\Desktop [tommymaynard@testsrv01 c/~/Desktop]$ # ProgramData folder: C:\ProgramData [tommymaynard@testsrv01 c/ProgramData]$
And, here’s the prompt function.
Function Prompt {
(Get-PSProvider -PSProvider FileSystem).Home = $env:USERPROFILE
# Determine if Admin and set Symbol variable.
If ([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match 'S-1-5-32-544')) {
$Symbol = '#'
} Else {
$Symbol = '$'
}
# Write Path to Location Variable as /.../...
If ($PWD.Path -eq $env:USERPROFILE) {
$Location = '/~'
} ElseIf ($PWD.Path -like "*$env:USERPROFILE*") {
$Location = "/$($PWD.Path -replace ($env:USERPROFILE -replace '\\','\\'),'~' -replace '\\','/')"
} Else {
$Location = "$(($PWD.Path -replace '\\','/' -split ':')[-1])"
}
# Determine Host for WindowTitle.
Switch ($Host.Name) {
'ConsoleHost' {$HostName = 'ConsoleHost'; break}
'Windows PowerShell ISE Host' {$HostName = 'ISE'; break}
default {}
}
# Create and write Prompt; Write WindowTitle.
$Prompt = "[$($env:USERNAME.ToLower())@$($env:COMPUTERNAME.ToLower()) $((Get-Location).Drive.Name.ToLower())$Location]$Symbol"
$Host.UI.RawUI.WindowTitle = "$HostName`: $Prompt"
"$Prompt "
}
Here are the previous posts on this topic:
http://tommymaynard.com/quick-learn-duplicate-the-linux-prompt-2016/
http://tommymaynard.com/quick-learn-an-addition-to-the-linux-powershell-promp-2016/
http://tommymaynard.com/quick-learn-an-addition-to-the-linux-powershell-prompt-ii-2016/
Update: There’s a part V (five) now. This includes an update to indicate when you’re in debug mode.