On Windows, it’s possible to create new “protocol handlers” so that URLs like ssh://hostname, telnet://hostname, etc. are recognized and launch some application (e.g., PuTTY). The only trickery is that Windows will pass the entire protocol string to the application (e.g., PuTTY will be launched with the command line putty telnet://hostname). For applications that understand the protocol prefix this is fine, but otherwise we have to employ a bit of scripting trickery to strip it off. Following this SO answer led to the possibility of using protocol handlers for all kinds of sysadmin things (the advantage being that protocol links can be embedded in wikis, Visio diagrams, hotsheets, inventory systems, etc.). As creating the required registry keys is a bit of a pain, I wrote regproto.js, a script for registering new protocol handlers.

Some examples should make its usage clear (run these from a command prompt, in the folder where you saved regproto.js):

regproto.js ping     "ping -t %%HOST%%"
regproto.js telnet   "putty -telnet %%HOST%%"
regproto.js ssh      "putty -ssh %%HOST%%" 
regproto.js cmd      "psexec \\%%HOST%% cmd.exe"
regproto.js shutdown "shutdown /s /m \\%%HOST%%"
regproto.js restart  "shutdown /r /m \\%%HOST%%"
regproto.js manage   "mmc compmgmt.msc /computer=\\%%HOST%%"
regproto.js ps       "powershell -NoExit -Command Enter-PSSession -ComputerName %%HOST%%"
regproto.js rdp      "mstsc /v:%%HOST%%"

The above will register

  • A ping:// handler which will open a console window with ping -t running on the host.

  • The usual ssh:// and telnet:// handlers, linked to PuTTY (assuming it’s in your %PATH%).

  • A cmd:// handler that will use psexec to launch a command interpreter on the remote machine.

  • A shutdown:// handler that will shutdown the remote machine.

  • A restart:// handler that will restart the remote machine.

  • A manage:// handler that will launch the Computer Management snapin connected to the remote machine.

  • A ps:// handler that will run Powershell on the remote machine.

  • A rdp:// handler that will launch a remote desktop connection to the target machine.

The only required arguments are the protocol name, and the command string to launch. The command string can refer to %%HOST%%, the “hostname” (or whatever) given in the protocol://hostname. Note that this could include a username and password, if your application understands those (PuTTY does, so you can do telnet://username@hostname and it will work).

The full documentation for regproto is in a big comment at the top of the file (pay special attention to the note at the bottom about custom protocols in Firefox and Chrome).

regproto will create a script urllaunch.js in %SystemRoot%\System32. This script is used to launch applications with the URL given, but with the protocol stripped off. It’s possible that (e.g.) antivirus might block the creation of this script, in which case you won’t be able to register any protocols.