It’s Not About the Bucket

icebucketLike the rest of the Internet I’ve been watching the ALS Ice Bucket Challenge. Yes, they are fun to watch. My 17 yr old son and his friend did a great one involving his truck. While noboby had “nominated” me, I had been thinking about pro-actively taking the challenge and calling people out. But the more I thought about it, the more I realized that while a wildly successful fundraiser for the ALS Association, the challenge has taken on a life of its own and now seems to as much about the person taking the challenge as it is about fundraising. I didn’t want to be just another person saying, “Look at me.” I’ve read a number of articles and commentaries about this challenge, many lamenting that the challenge is overshadowing the cause. Don’t get me wrong, I applaud everyone who took the challenge and especially those who contributed financially as well. But at this point I think the meme is at its end.

So, I decided to simply make a $100 donation to the ALS Association. Primarily because I believe in their cause. I have known a few families devastated by this disease so my inspiration is them and not some artificial need to feel like I belong to a special club. The reason I am even posting this is because even though I am skipping the ice, I am still issuing a challenge to the PowerShell community to step up and join me. If you want to do the ice bucket thing and get specific people involved, then by all means do so. But the true aim of this challenge, which I don’t want to get lost, is to raise money for a worthy cause.

You can learn more about the association and make an online donation at http://www.alsa.org/

A Timely PowerShell Prompt

021913_2047_WordTest1.pngDuring the course of writing a few scripts that refresh a specific part of the console, such as the recent Read-Host alternative, I realized that flashing colors wasn’t always necessary. The fact that I could update the same space on the screen meant I could write the same content with minor changes and it would look like the the screen as “flipping”. Essentially I was thinking of a clock.

So I thought it might be handy to have a clock as part of my PowerShell prompt. PowerShell has a built-in function called Prompt but you can replace it with your own version. The function will only last for as long as your PowerShell session so if you don’t like it, exit and restart PowerShell.

This is for the most part the basic function that shows PS and your current location. This prompt function will not work properly in the PowerShell ISE. The magic happens by always setting the cursor to the same coordinates in the PowerShell shell console. I use the same type of While loop I used in my other functions, only this time I’m waiting for the user to press any key, which would indicate the start of typing a command. Once that has been detected, the looping stops and the time ceases to be refreshed in the prompt.

You really need to see this live but here’s a screenshot example.
time-prompt-1

Then I thought it might be helpful to have the clock stand out so I added a little color.

time-prompt-2

The only issue I’ve found with these prompts, is that if you need to scroll in the console window, you’ll need to press the spacebar or type something so that the clock stops refreshing. Otherwise you are scrolling while PowerShell is trying to write to the console.

Instead of clock you could use a countdown timer. Or perhaps some sort of performance counter. For a prompt though, you need to make sure you can get and display the information in a few hundred milliseconds, otherwise the prompt will feel sluggish and unresponsive.

Enjoy and let me know where this leads you.

More Flashing Fun

talkbubbleI received a lot of interest in my Invoke-Flasher script. One comment I received on Twitter was for a way to use it interactively in a script. In essence, he wanted a flashing Read-Host so I took my original concept and tweaked it until I came up with a Read-Host alternative I simply call Read-Host2. This function will only work in the PowerShell console, NOT the PowerShell ISE.

The main tweak I made was to collect all the typed keys until Enter is pressed. I have a Switch construct to also eliminate the Shift key. The assumption is that you are writing text so this should be the only non alphanumeric key you would use. The message prompt will keep flashing until you start typing. I also emulated echoing text to the screen, including password masking if you use AsSecureString. The last change is a new parameter to allow you to flash the foreground color instead of the background color. There are several examples in the comment-based help.

Here are some screen shots.
Read-Host2-01

Read-Host2-02

I hope you’ll let me know what you think.

Advice, solutions, tips and more for the lonely Windows administrator with too much to do and not enough time.

%d bloggers like this: