I got an interesting question from a co-worker today (we’ll call him “Ray” to protect his identity). Ray wanted to know if it’s possible for his customer to reboot a bunch of workstations at once, in a way other than the customer’s workstation management system.
The customer is in the midst of a major migration from XP to Windows 7, and simultaneously from Novell ZENworks 7 to Novell ZCM 11. Ray’s team has put together an amazing set of automatic deployment steps that take the ZENworks-controlled XP machine all the way to a completely-deployed, domain-managed, ZCM-controlled Win 7 machine with all needed applications installed, via a method called “Zero Touch Deployment”. And it all kicks off with a reboot — but the only problem is that the bundled reboot in the old ZENworks is not always reliable.
Note: This particular customer’s machines are XP, all in one domain, all are resolvable (either via WINS or DNS), and can all be managed by a single set of credentials; allowing remote administrative execution and permitting the following to work.
So when Ray asked the question, I said, “Absolutely!” I can do that, and not even break out PowerShell (or bash, for that matter). Ray had nothing more than a list of computer names, but that is all we need. Let’s do it old-school, with a DOS batch “for” loop. Man, I love my job…
First, the input file; it is just a single list of computer names or IP addresses, one-per-line, in a TXT file. We put them in a file called
C:TEMPRemoteRebooter-Input.txt, and here’s a varied example of how it might look:
pc1 10.2.1.3 wks22.domain.local 192.168.33.44 amyscomputer
The script is a bit on the simple side, but does the job. I call this
RemoteRebooter.bat, and notice that it calls the other input file by name:
@ECHO OFF @Echo Process RemoteRebooter... @For /F "tokens=*" %%Q in (c:tempRemoteRebooter-Input.txt) Do @( 1>&2 ECHO Rebooting: %%Q shutdown -m \%%Q -r -f -t 20 -c "Rebooting in 20 seconds via %0 -- please save your work quickly." ) 1>&2 type nul @ECHO Complete!
If you need details on the
shutdown flags, type
shutdown /? into a command prompt. And I’m not sure if I should mention it here, but if you want this to work on Windows 7, you have to change the syntax a bit, flipping hyphens (-) to slashes (/). And of course, this is only one way of doing it, and I know you all have others.
Make sure to drop a comment and tell us how *you* do it!