Custom PowerShell prompts [closed] Custom PowerShell prompts [closed] powershell powershell

Custom PowerShell prompts [closed]


This is modified version of jaykul's prompt. The benefit is that

-there is a current history id, so you can invoke previous items from history very easily (you know the id)-it's a little reminder - I add my tasks to the prompt so I don't forget them (see the sshot)

function prompt {  $err = !$?  $origOfs = $ofs;  $ofs = "|"  $toPrompt = "$($global:__PromptVars)"  $ofs = $origOfs;  if ($toPrompt.Length -gt 0) {     Write-Host "$($toPrompt) >" -ForegroundColor Green -NoNewline }  $host.UI.RawUI.WindowTitle = "PS1 > " + $(get-location)  # store the current color, and change the color of the prompt text  $script:fg = $Host.UI.RawUI.ForegroundColor  # If there's an error, set the prompt foreground to "Red"  if($err) { $Host.UI.RawUI.ForegroundColor = 'Red' }  else { $Host.UI.RawUI.ForegroundColor = 'Yellow' }  # Make sure that Windows and .Net know where we are at all times  [Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath  # Determine what nesting level we are at (if any)  $Nesting = "$([char]0xB7)" * $NestedPromptLevel  # Generate PUSHD(push-location) Stack level string  $Stack = "+" * (Get-Location -Stack).count  # Put the ID of the command in, so we can get/invoke-history easier  # eg: "r 4" will re-run the command that has [4]: in the prompt  $nextCommandId = (Get-History -count 1).Id + 1  # Output prompt string  # Notice: no angle brackets, makes it easy to paste my buffer to the web  Write-Host "[${Nesting}${nextCommandId}${Stack}]:" -NoNewLine  # Set back the color  $Host.UI.RawUI.ForegroundColor = $script:fg  if ($toPrompt.Length -gt 0) {       $host.UI.RawUI.WindowTitle = "$($toPrompt) -- " + $host.UI.RawUI.WindowTitle  }  " "}function AddTo-Prompt($str) {  if (!$global:__PromptVars) { $global:__PromptVars = @() }  $global:__PromptVars += $str}function RemoveFrom-Prompt($str) {  if ($global:__PromptVars) {    $global:__PromptVars = @($global:__PromptVars | ? { $_ -notlike $str })  }}

sshot


Here's mine:

function prompt {   # our theme   $cdelim = [ConsoleColor]::DarkCyan   $chost = [ConsoleColor]::Green   $cloc = [ConsoleColor]::Cyan   write-host "$([char]0x0A7) " -n -f $cloc   write-host ([net.dns]::GetHostName()) -n -f $chost   write-host ' {' -n -f $cdelim   write-host (shorten-path (pwd).Path) -n -f $cloc   write-host '}' -n -f $cdelim   return ' '}

It uses this helper function:

function shorten-path([string] $path) {   $loc = $path.Replace($HOME, '~')   # remove prefix for UNC paths   $loc = $loc -replace '^[^:]+::', ''   # make path shorter like tabs in Vim,   # handle paths starting with \\ and . correctly   return ($loc -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2')}


Here is my prompt function

function prompt() {    if ( Test-Wow64 ) {        write-host -NoNewLine "Wow64 "    }    if ( Test-Admin ) {         write-host -NoNewLine -f red "Admin "    }    write-host -NoNewLine -ForegroundColor Green $(get-location)    foreach ( $entry in (get-location -stack)) {        write-host -NoNewLine -ForegroundColor Red '+';    }    write-host -NoNewLine -ForegroundColor Green '>'    ' '}