Automating a powershell demo using AutoHotKey
I gave a custom Exchange 2007 course to one of our customers yesterday. Not unsurprisingly, it also included a demo of Exchange Management Shell (EMS). These demos tend to end up in a quest for the exact command, which is quite annoying if you’re in front of an audience (even a small one). Think about:
- about_regular_expressions or about_regular_expression?
- $_. or $._?
- Why is -Confirm $False not working?
This time I decided to try and automate that demo by using the autoreplace feature (Hotstring) in AutoHotKey. The main goal is avoiding typo’s by using tried and true commands in a working order. A poor man’s Start-Demo script if you wish ;-)
The script starts of with a bunch of commands controlling the overall functionallity (the first 3 come with the default template):
#NoEnv
Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input
Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%
Ensures a consistent starting directory.
#Hotstring EndChars `n
Limit the hotstring end characters to ENTER only
#Hotstring O
Don’t actually type the end character. (I want to launch the command myself after/during my explanation.)
#Hotstring R
Type replacement text in raw mode. (To prevent AHK from interpreting e.g. “{“)
The remainder of the script is actually a long list of hotstring definitions like these ones
::ems01::Get-Help
::ems02::Get-Help About
::ems03::Get-Help About_Regular_Expression
::ems04::Get-Command *mailbox
::ems05::Get-Help New-Mailbox
::ems06::Get-Help New-Mailbox -Detailed
::ems07::Get-Help New-Mailbox -Full
and so on.
Seems stupid with these simple examples, but the advantage becomes clear for more complex commands. Lets take “ems26″ for example;
::ems26::1..10 | Foreach-Object { new-mailbox -Database “Mailbox Database 2″ -Name (“User” + $_) -UserPrincipalName (“User” + $_ + “@exchange2007.lab”) -Password $Pwd }
When I type “ems26″+ENTER in EMS AutoHotKey executable automatically replaces this string with “1..10 | Foreach-Object { new-mailbox -Database “Mailbox Database 2″ -Name (“User” + $_) -UserPrincipalName (“User” + $_ + “@exchange2007.lab”) -Password $Pwd }” and waits. I do my talking and then hit ENTER again to execute the command.
It worked nicely actually. People were impressed with my typing skills ;-) I only encountered one error because I didn’t delete some manually after a test the day before. It even works with shell running inside a VM while the AutoHotKey script is running on my physical computer.
Give this a try :)
http://blogs.msdn.com/powershell/archive/2007/06/03/new-and-improved-start-demo.aspx