In the previous tip we presented code that would update the PowerShell title bar in a background thread, displaying a live clock.
Wouldn’t it be nice to also show the current path location? The challenge: how would the background thread know the current path of the foreground PowerShell?
There is a PowerShell variable called $ExecutionContext which provides all kinds of useful information on the state of a context, including the current path. By passing the $ExecutionContext from the foreground process to your background thread, the thread can display the current path of the foreground process.
# submit the host process RawUI interface and the execution context
# find the current location in the host process
$location = $ExecContext.SessionState.Path.CurrentLocation
# compose the time and date display
$time = Get-Date -Format 'HH:mm:ss dddd MMMM d'
# compose the title bar text
$title = "$location $time"
# output the information to the title bar of the host process
$RawUI.WindowTitle = $title
# wait a half second
Start-Sleep -Milliseconds 500
} while ($true)
$ps = [PowerShell]::Create()
$null = $ps.AddScript($code).AddArgument($host.UI.RawUI).AddArgument($ExecutionContext)
$handle = $ps.BeginInvoke()
When you run this code, the PowerShell title bar shows the current path and the live clock. When you switch the current path, i.e. by running “cd c:\windows”, the title bar immediately updates.
There are plenty of use cases here that can be tackled with the code above:
ReTweet this Tip!