Link to home
Create AccountLog in
Avatar of jmatarranz
jmatarranzFlag for Spain

asked on

Shutting down multiple machines from a central location

Hi,

May be you've needed it multiple times. I would like if there is some easy tool or script to shutdown multiples windows machines from a central location. Next week I'm going to need unplug our CPD form mantainance tasks.

I know 'shutdown' command from Mircrosoft Kit Resource but I don't want to create a 'task scheduler' in every machine with this command. I would like save time.

Regards,
David.
ASKER CERTIFIED SOLUTION
Avatar of skca54
skca54
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account
Avatar of Brian Pierce
You can create a batch file containng multiple shutdown commands eg

shutdown /m \\Computer01 /f /s
shutdown /m \\Computer02 /f /s
...
shutdown /m \\Computer99 /f /s

then you only have to schedule the batch file

Avatar of Paka
Paka

Or if you want to create a batch file:
shutdown /s /m \\computername1
shutdown /s /m \\computername2
shutdown /s /m \\computername3
Whats the difference between except the order of the arguments between your answer and mine Paka ?

If you want an alternative try PsShutdown from sysinternals - you can specify the list of machines in a text file. see http://www.microsoft.com/technet/sysinternals/miscellaneous/psshutdown.mspx
Not much.  I was working on the post and went to go get some tea - you beat me to the post.
OK no problem - it happens sometimes
You could use the vbs script below to remotely shutdown any computer on your network provided that you have administrative access to them. You could modify the script to read in a list of computers and perform the shutdown action on each.


'/\
 
'|| Remote Shutdown.vbs
 
'||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
'|| SCRIPT LOGIC FLOW:
 
'|| Collects computername from user, calls function to ping the computername
 
'|| to determine if it is accessible, if not then display message and exit
 
'|| otherwise continue.
 
'|| Collects desired action to perform from the user, does error checking on
 
'|| the input to determine if it is acceptable, if not then display message
 
'|| and exit otherwise continue.
 
'|| Set variables and output messages based on the action chosen. Calls
 
'|| Win32Shutdown with the appropriate variable. Displays success message
 
'|| and exits
 
'||
 
'|| Uses WMI Win32Shutdown method from the Win32_OperatingSystem class
 
'|| to perform different logoff / powerdown / reboot functions
 
'||
 
'|| Testing found the following values to be effective on Win32Shutdown:
 
'||        Action	decimal  binary
 
'||	Logoff		  0	 0000
 
'||	Force Logoff	  4	 0100
 
'||	Reboot		  2	 0010
 
'||	Force Reboot	  6	 0110
 
'||	Powerdown	  8	 1000
 
'||	Force Powerdown	 12	 1100
 
'||
 
'|| Notice that the third bit from the right appears to be the "FORCE" bit.
 
'||
 
'|| A value of 1 will do a shutdown, ending at the "It is safe to turn
 
'|| off your computer" screen.  I have no use for this and did not test it.
 
'||
 
'||
 
'||NOTES:  - tested under Windows 2000 Pro. with ACPI compliant systems -
 
'||          SHOULD work under Windows NT4 without modification IF the
 
'||          system has compatible versions of WSH / WMI / VBscripting
 
'||
 
'||Logoff / Powerdown / Reboot:
 
'||  Does not work if a password protected screen saver is active or
 
'||  there is data to save.  Either way the system waits for user input.
 
'||
 
'||Force Logoff / Force Powerdown / Force Reboot:
 
'||  Does not work if a password protected screen saver is active, will wait
 
'||  for user input.  Otherwise will close open applications without saving data.
 
'||
 
'\/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
 
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\ start function /\/\/\/\/\/\/\/\/\/\/\/\/\/\
 
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\______________/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
 
function Ping(byval strName)
 
 dim objFSO, objShell, objTempFile, objTS
 
 dim sCommand, sReadLine
 
 dim bReturn
 
 
 
 set objShell = WScript.CreateObject("Wscript.Shell")
 
 set objFSO = CreateObject("Scripting.FileSystemObject")
 
 
 
 'Set default return value
 
 bReturn = false
 
 
 
 'Create command line to ping and save results to a temp file
 
 sCommand = "cmd /c ping.exe -n 3 -w 1000 " & strName & " > c:\temp.txt"
 
 
 
 'Execute the command
 
 objShell.run sCommand, 0, true
 
 
 
 'Get the temp file
 
 set objTempFile = objFSO.GetFile("c:\temp.txt")
 
 set objTS = objTempFile.OpenAsTextStream(1)
 
 
 
 'Loop through the temp file to see if "reply from" is found,
 
 'if it is then the ping was successful
 
 do while objTs.AtEndOfStream <> true
 
  sReadLine = objTs.ReadLine
 
  if instr(lcase(sReadLine), "reply from") > 0 then
 
   bReturn = true
 
   exit do
 
  end if
 
 loop
 
 
 
 'Close temp file and release objects
 
 objTS.close
 
 objTempFile.delete
 
 set objTS = nothing
 
 set objTempFile = nothing
 
 set objShell = nothing
 
 set objFSO = nothing
 
 
 
 'Return value
 
 Ping = bReturn
 
end function
 
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\  end function  /\/\/\/\/\/\/\/\/\/\/\/\/\/\
 
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\______________/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
 
 
 
 
 
 
 
'/\/\/\/\/\/\/\/\/\/\/\ Start Main body of script /\/\/\/\/\/\/\/\/\/\/\/\
 
'\/\/\/\/\/\/\/\/\/\/\/\_________________________/\/\/\/\/\/\/\/\/\/\/\/\/
 
'Get computer name to operate On
 
ComputerName=InputBox("Enter the Machine name of the computer" & vbCRLF _
 
                    & "you wish to Shutdown / Reboot / Logoff", _
 
                      "Remote Shutdown / Reboot / Logoff", _
 
                      "ComputerName")
 
 
 
'if Cancel selected - exit 
 
If (ComputerName = "") Then Wscript.Quit
 
 
 
'change the name to uppercase
 
ComputerName=UCase(ComputerName)
 
 
 
'ping the computername to see if it is accessible
 
bPingtest = ping(Computername)
 
 
 
'If bPingtest = FALSE Then
 
' y = msgbox ("'" & ComputerName & "' is not accessible!" & vbCRLF _
 
'           & "It may be offline or turned off." & vbCRLF _
 
'           & "Check the name for a typo." & vbCRLF, _
 
'              vbCritical, ComputerName & " NOT RESPONDING")
 
' Wscript.Quit
 
'end IF
 
 
 
'Get the action desired
 
Action=InputBox( _
 
    "Select Action to perform on " & ComputerName & vbCRLF & vbCRLF _
 
  & "  1 - Logoff" & vbCRLF _
 
  & "  2 - Force Logoff	( NO SAVE )" & vbCRLF _
 
  & "  3 - Powerdown" & vbCRLF _
 
  & "  4 - Force Powerdown	( NO SAVE )" & vbCRLF _
 
  & "  5 - Reboot" & vbCRLF _
 
  & "  6 - Force Reboot	( NO SAVE )" & VbCrLf & vbCRLF _
 
  & "NOTE:" & vbCRLF _
 
  & "  Using Force will close windows" & vbCRLF _
 
  & "  without saving changes!", _
 
    "Select action to perform on " & ComputerName, "")
 
 
 
'if Cancel selected - exit 
 
If (Action = "") Then Wscript.Quit
 
 
 
'error check input
 
If (INSTR("1234567",Action)=0) OR (Len(Action)>1) then
 
 y = msgbox("Unacceptable input passed -- '" & Action & "'", _
 
             vbOKOnly + vbCritical, "That was SOME bad input!")
 
 Wscript.Quit
 
end if
 
 
 
' set flag to disallow action unless proper input is achieved, 1 => go 0 => nogo
 
flag = 0
 
 
 
'set variables according to computername and action
 
Select Case Action
 
  Case 1					'Logoff
 
	x = 0
 
	strAction = "Logoff sent to " & ComputerName
 
	flag = 1
 
  Case 2					'Force Logoff   
 
	x = 4
 
	strAction = "Force Logoff sent to " & ComputerName
 
	flag = 1
 
  Case 3					'Powerdown
 
	x = 8
 
	strAction = "Powerdown sent to " & ComputerName
 
	flag = 1
 
  Case 4					'Force Powerdown
 
	x = 12
 
	strAction = "Force Powerdown sent to " & ComputerName
 
	flag = 1
 
  Case 5					'Reboot
 
	x = 2
 
	strAction = "Reboot sent to " & ComputerName
 
	flag = 1
 
  Case 6					'Force Reboot
 
	x = 6
 
	strAction = "Force Reboot sent to " & ComputerName
 
	flag = 1
 
  Case 7					'Test dialog boxes
 
	y = msgbox("Test complete", vbOKOnly + vbInformation, "Dialog Box Test Complete")
 
	flag = 0
 
  Case Else					'Default -- should never happen
 
        y = msgbox("Error occurred in passing parameters." _
 
                  & vbCRLF & "        Passed '" & Action & "'", _
 
                    vbOKOnly + vbCritical, "PARAMETER ERROR")
 
	flag = 0
 
End Select
 
 
 
'check flag
 
' if equal 1 (TRUE) then perform Win32Shutdown action on remote PC
 
'   and display a confirmation message
 
' if not equal 1 (FALSE) then skip the action and script ends
 
if flag then
 
 Set OpSysSet=GetObject("winmgmts:{(Debug,RemoteShutdown)}//" _
 
                   & ComputerName & "/root/cimv2").ExecQuery( _
 
              "Select * from Win32_OperatingSystem where Primary=true")
 
 for each OpSys in OpSysSet
 
  OpSys.Win32Shutdown(x)
 
  y = msgbox(strAction,vbOKOnly + vbInformation,"Mission Accomplished")
 
 next
 
end If
 
 
 
'Release objects
 
set OpSys = nothing
 
set OpSysSet = nothing

Open in new window

SOLUTION
Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account