Notice: The following post was originally published on another website. As the post is no longer accessible, it is being republished here on tommymaynard.com. The post was originally published on April 29, 2019.
Back toward the end of March 2019, I published a script to the PowerShell Gallery called Switch-Prompt
. It’s a function, packaged as a .ps1 file, that allows a user to switch their prompt between the standard-issued, Microsoft Prompt, a Linux look-alike prompt, and a customizable Linux look-alike prompt. I wrote about it right here, on tommymaynard.com.
I indicated in that article that that version was the one. Yeah, so that didn’t last long. Well, as of today and version 1.1.0, it now includes a minimal prompt, as well. You know, this guy: PS>
. I’ve taken 1.0.0 to 1.1.0 — wait, timeout — I just had another idea. Here we go again, we’re moving this up to version 1.2.0. This is going to be the one, and I may just really mean it this time.
You couldn’t tell, but the time between the first two paragraphs and this one was a few days. It’s worth it, as the Switch-Prompt
function is now at version 1.2.0 and it’s awesome. And to think, I thought I was done back at 1.0.0; I should’ve known. But seriously, this is the last prompt you’re ever going to need and I suspect, that this is the last time I’ll need to make changes — it does everything! It’s come a really long way. It can create a minimal prompt, a standard prompt, a Linux prompt, a customizable Linux prompt, and now, a completely custom prompt. Anything you want! All you have to do is place your code in a ScriptBlock. We’ll see some examples.
Before we see how it can be used, let’s get it installed. It’s available in the PowerShell Gallery, so the below command will get the newest version installed for the current user. Use the Force
switch parameter if you’ve installed a previous version, and also use the Verbose
switch parameter, so you know what’s taking place during its installation. It’s not a requirement, but it can be a learning experience for a process that produces no output by default.
PS C:\Program Files\7-Zip> Install-Script -Name Switch-Prompt -Scope CurrentUser
Because the script is delivered as a function in a script file (a .ps1), you’re required to dot-source the script in order to add the function to the current session (notice the dot before the script’s path). This will need to be done every time a new session begins and you want to use the function. To avoid that, it’s best to add the below command to a profile script that executes at the start of every new PowerShell session. If you choose to obtain the Switch-Prompt
another way, then here’s the main page for it on the PowerShell Gallery: https://www.powershellgallery.com/packages/Switch-Prompt/1.2.0.
PS> . C:\Users\tommymaynard\Documents\WindowsPowerShell\Scripts\Switch-Prompt.ps1
If you’re dot sourcing the script file from your profile script, such as we’ve done above, then be sure to include your Switch-Prompt
command there, as well. You’ll see plenty of examples below and even more in the function’s comment-based help. On that note, instead of explaining all the Switch-Prompt
options, I’m opting to copy in some of the comment-based help’s examples. In this first example, we’ll see how to switch to a minimal prompt. This was the 1.1.0 update — big whoop now, as you’ll soon see.
PS C:\Program Files\7-Zip\Lang> Switch-Prompt -Type Minimal PS> PS>
Next, we’ll move from the minimal prompt back to the default, standard prompt. This is the default action when the Type
parameter and a value are not included. Therefore, using -Type Standard
isn’t actually necessary to recreate the Standard prompt.
PS> Switch-Prompt -Type Standard PS C:\Program Files\7-Zip\Lang> PS C:\Program Files\7-Zip\Lang>
From here, we’ll try out the new Custom type prompt. If the Prompt parameter and value aren’t included, Switch-Prompt
uses its built-in default, which actually indicates to use the Prompt
parameter. Doing so — using that Prompt
parameter — is what sets this type, and its possibilities, apart. We’ll see that after this first example.
PS C:\Program Files\7-Zip\Lang> Switch-Prompt -Type Custom Default (use Prompt parameter)> Default (use Prompt parameter)>
In this example, we create a simple static — and you’ll see what I mean in a moment — prompt. It’s a simple text-based prompt.
Default (use Prompt parameter)> Switch-Prompt -Type Custom -Prompt {'PWRSHLL > '} PWRSHLL > PWRSHLL >
Next, we’ll start adding some dynamic elements to our prompt. This example includes the current date and time, each time the prompt is written. It’s about now that you should recognize that the Switch-Prompt’s dynamic parameter, Prompt, requires a ScriptBlock parameter value. Ensure you’re using the opening and closing curly braces, whether or not you use a static or dynamic prompt.
PWRSHLL > Switch-Prompt -Type Custom -Prompt {"$(Get-Date) > "} 04/26/2019 21:55:56 > 04/26/2019 21:55:57 >
In this example, we’ll use some environmental variables to help create our prompt.
04/26/2019 21:56:10 > Switch-Prompt -Type Custom -Prompt {"$env:USERDOMAIN\$env:COMPUTERNAME --> "} MYDOMAIN\TMLAPTOP --> MYDOMAIN\TMLAPTOP -->
This will be the final example for this article. This also uses the Custom
Type, but now we’ll include an If-ElseIf-Else
construct as the value for our Prompt
parameter. When using a ScriptBlock
parameter value, there’s really nothing we can’t dream up for our prompt. Just remember that you may need to use the ToString()
method if your commands are not inside a quoted string (which forces a string). Be sure to see one of the other Get-Date
examples, from the function’s comment-based help, where this is shown.
MYDOMAIN\TMLAPTOP --> Switch-Prompt -Type Custom -Prompt {If ($env:COMPUTERNAME -match 'laptop') {"$($env:COMPUTERNAME)|LPT: "} ElseIf ($env:COMPUTERNAME -match 'desktop') {"$($env:COMPUTERNAME)|DKT: "} Else {'[--PS--]> '}} TMLAPTOP|LPT:
We haven’t covered it here with examples, so be sure to check out the Linux and LinuxCustom Types, as well. Switch-Prompt
includes 14 comment-based help examples. Additionally, there were some examples in this first article: https://tommymaynard.com/linux-prompt-x/. What you’re looking for is likely in one of these two places, and if not, there’s probably enough in there to inspire you to come up with something unique. For real, I think I’m done at 1.2.0, but only time will tell.