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.