Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Script: Mass emergency shutdown of computers

Status
Not open for further replies.

hgate73

IS-IT--Management
Feb 22, 2008
80
US
Our power goes out every week for generator maintenance, and usually we're not given any advanced notice. Users lose important work, and invariably at least one Windows box blows up because of the power loss in the middle of a data write or something.

I wrote this scrip this morning to let me mass-shutdown all of our computers when there's pending power loss. You can set the timeout to whatever you want, as well as the message. It reads a list of computer names (on per line) from names.txt

Code:
:: Author:          --removed--
:: Purpose:         Performs mass shutdown for specified computers
:: Requirements:    1. Run this script with your SA account so that it can connect to other machines and run with admin privileges
::                  2. Put the names of your computers, one per line, in "names" file in the same directory as this script
:: Version:         1.0 Initial write

:: Prep
:prep
@echo off
title Mass Shutdown
set NAMES_FILE=names.txt
set VERSION=1.0
set TIMER=120
set MESSAGE=Due to generator maintenance, this computer is shutting down in %TIMER% seconds. Save all work and log off immediately.
set TARGET=
cls

:: Menu
:shutdown
echo.
echo  Mass Shutdown script - pretty awesome
echo.
echo  Timeout:    %TIMER%
echo  Names File: %NAMES_FILE%
echo  Message:    %MESSAGE%
echo.
echo  Enter one of the following: 
echo    - The IP or name of a computer to shutdown in %TIMER% seconds.
echo    - 'all' to shutdown ALL computers in %NAMES_FILE%. You will be asked to confirm.
echo    - 'abort' to cancel a pending shutdown.
echo    - 'exit' to quit
echo.
:shutdown_loop
@set /P TARGET= Choice: 
	if '%TARGET%'=='all' goto shutdown_auto    
	if '%TARGET%'=='abort' goto shutdown_abort
	if '%TARGET%'=='exit' goto end
:: else we assume a target was chosen
shutdown -s -f -m \\%TARGET% -t %TIMER% -c "%MESSAGE%"
set TARGET=
echo.
goto shutdown_loop


:: HIROSHIMA!
:shutdown_auto
title Mass Shutdown
cls
echo.
echo Verify information:
echo.
echo Timeout:    %TIMER%
echo Target:     %TARGET%
echo Names File: %NAMES_FILE%
echo Message:    %MESSAGE%
echo.
echo Ready??
echo.
pause
echo Commencing...
echo.
echo Performing mass shutdown, %TIMER% second countdown.
echo Please wait...
echo.
FOR /F %%i in (%NAMES_FILE%) do shutdown -s -f -m \\%%i -t %TIMER% -c "%MESSAGE%"
goto shutdown

:shutdown_abort
title Abort a mass shutdown
:shutdown_abort_menu
cls
echo.
echo  Enter one of the following:
echo     - The IP or name of a computer to cancel a pending shutdown
echo     - 'all' to cancel a pending mass shutdown.
echo     - 'shutdown' to return to shutdown mode
echo     - 'exit' to quit
echo.
:shutdown_abort_loop
@set /P TARGET= Choice: 
	if '%TARGET%'=='all' goto shutdown_abort_auto    
	if '%TARGET%'=='shutdown' goto prep
	if '%TARGET%'=='exit' goto end
:: else we assume a target was chosen
shutdown -a -m \\%TARGET%
set TARGET=
echo.
goto shutdown_abort_loop


:shutdown_abort_auto
FOR /F %%i in (%NAMES_FILE%) do shutdown -a -m \\%%i
goto end

:end
title %USERNAME%

I was previously posting under "GeneralDzur" but hgate73 is my new username.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top