Solved

Shut Down a Remote servers -Script

Posted on 2012-03-20
2
230 Views
Last Modified: 2012-03-26
Hello,

My question I have virtual server that is connected to a UPS via USB and I want to turn off 5 servers in case that the fall supply voltage.

I have managed with VBScript turn off the servers but only an administrator's password is the same to all of the servers:

'This Scrip Will Work Only if the Root password is the same'
strComputer = "Enter Remote Computer Name"
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
        strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Shutdown(1)
Next

Open in new window


Can anyone advise me where to continue???

Thanks
ItzhakBM
0
Comment
Question by:itzhakbm
2 Comments
 
LVL 77

Accepted Solution

by:
arnold earned 500 total points
ID: 37741967
http://msdn.microsoft.com/en-us/library/windows/desktop/aa389290(v=vs.85).aspx#vbs_example1


Not too sure what you are asking. The link above has an example where the credentials are included in a script.
0
 

Author Comment

by:itzhakbm
ID: 37762256
Hi,

Very much helped to understand ,It is new for VBscript

It took me a few days to understand the script.

but i did not manage to run the script automatic .


Dim strComputer, RestartMode, debug, strUsername, strPasswd

Debug = 1

'declare arguments variable
Set objArgs = WScript.Arguments

'if there are command-line arguments, then...
If objargs.Count Then

For I = 0 to objArgs.Count - 1
'If debug = 1 Then wscript.echo "argument: " & objargs(i)

'check to find the computername that is specified
If InStr(1,LCase(objargs(I)),"computer:") Then
On Error Resume Next
'split into an array, using : as a delimiter
strMDArray = split(objargs(I),":") 
'set strcomputer to be what follows the ':'
strComputer = strMDArray(1)
'Next, find what action you wish to perform on strcomputer 
ElseIf InStr(1,LCase(objargs(I)),"action:") Then
'split into array again
strActionArray = split(objargs(I),":")
'set restartmode to what follows the ':'
restartmode = Trim(LCase(strActionArray(1)))
' Sam Add Some code start here
ElseIf InStr(1,LCase(objargs(I)),"User:") Then
'split into array again
strActionArray = split(objargs(I),":")
'set restartmode to what follows the ':'
strUsername = Trim(LCase(strActionArray(1)))

ElseIf InStr(1,LCase(objargs(I)),"Password:") Then
'split into array again
strActionArray = split(objargs(I),":")
'set restartmode to what follows the ':'
strPasswd = Trim(LCase(strActionArray(1)))
' Sam Add Some code end here
End If
Next
'call chkcomputername to verify that there is something
' entered.
Call ChkComputerName
'if the word reboot appears in the restartmode var, then...
If InStr(LCase(restartmode),"reboot") Then 
    RestartMode = 0
ElseIf InStr(LCase(restartmode),"logoff") Then 
RestartMode = 2
ElseIf InStr(LCase(restartmode),"shutdown") Then
    RestartMode = 1
Else
'if the restartmode variable is not correct, then quit
wscript.echo "You must use the following syntax when defining an action: reboot|logoff|shutdown" & vbcrlf _
& vbcrlf & "Invalid syntax: [" & restartmode & "] now quitting."    
wscript.quit
End If
Else
'if no command-line parameters were passed, then prompt with inputbox
' first for the computername 
strComputer=InputBox("Perform restart action on what computer?","Enter Computer Name",strComputer)
'find out if computername is valid
Call ChkComputerName
'prompt for restartmode using inputbox
RestartMode = InputBox("I would like to perform the following action on " & strComputer & ":" & vbcrlf & vbcrlf _ 
& "0 - Restart " & strComputer & vbcrlf _
& "1 - Logoff " & strComputer & vbcrlf _
& "2 - Shutdown " & strComputer & vbcrlf _ 
& vbcrlf,"Restart action",RestartMode)
'if no restartmode was specified, then quit
If RestartMode = "" Then 
wscript.echo "No restart action was specified, now quitting."
wscript.quit
'if restartmode does not fall between 0 and 2, then quit
ElseIf RestartMode < 0 or Restartmode > 2 Then
wscript.echo "You must select a valid option between 0 and 3. Script will now exit."
wscript.quit
End If

End If

'put computername into uppercase
strComputer = UCase(strComputer)

'Call actual code to restart the PC
Call RestartAction

Sub ChkComputerName
'if no computername is specified (blank), then quit
If strComputer = "" Then 
wscript.echo "You must define a computer name after the computer: argument. None " _
& "were specified, now quitting."
wscript.quit
'if computername contains two backslashes, then quit
ElseIf InStr(strComputer,"\\") Then
wscript.echo "Please specify the computer name without the leading backslashes. " _
& "Now quitting." 
wscript.quit
End If
End Sub

Sub RestartAction
    On Error GoTo 0
         
' Sam Comment out some lines of code, and add a prompt box to get the username and password input from user.
    ' ===== Sam added & modified codes start here =====  
strUsername=InputBox("Please input remote user's account?","Enter the account",strUsername)  
    strPasswd=InputBox("Please input remote user's password?","Enter the password",strPasswd)
	Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
	Set objSWbemServices = objSWbemLocator.ConnectServer _
    		(strComputer, "root\cimv2", strUsername, strPasswd)
	objSWbemServices.Security_.ImpersonationLevel = 3 
	
'Call WMI query to collect parameters for reboot action
    'Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//"_ 
     '& strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem"_
     '& " where Primary=true") 

Set OpSysSet = objSWbemServices.ExecQuery("select * from Win32_OperatingSystem"_
    & " where Primary=true") 
    
 ' ===== Sam added & modified code end here =====

Dim OpSysSet, OpSys
    If debug = 1 Then wscript.echo "Computer: " & strComputer & vbcrlf _
     & "Restart Action: " & RestartMode
     
'set PC to reboot
If RestartMode = 0 Then

        For each OpSys in OpSysSet 
            opSys.Reboot()
        Next 

'set PC to logoff
ElseIf RestartMode = 1 Then
        
        Const EWX_LOGOFF = 0 
        For each OpSys in OpSysSet 
            opSys.win32shutdown EWX_LOGOFF
        Next 

'set PC to shutdown
ElseIf RestartMode = 2 Then
                
        For each OpSys in OpSysSet 
            opSys.Shutdown()
        Next 
                
    End If
End Sub 

Open in new window




Thanks
ItzhakBM
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In a hurry?.. scroll down to "HERE's HOW TO DO IT" Section. Greetings All, I was going to post this as question/solution, but its seems more appropriate as an article considering its length.  I felt it important to illucidate all the details c…
Citrix XenApp, Internet Explorer 11 set to Enterprise Mode and using central hosted sites.xml file.
This video Micro Tutorial explains how to clone a hard drive using a commercial software product for Windows systems called Casper from Future Systems Solutions (FSS). Cloning makes an exact, complete copy of one hard disk drive (HDD) onto another d…
With the advent of Windows 10, Microsoft is pushing a Get Windows 10 icon into the notification area (system tray) of qualifying computers. There are many reasons for wanting to remove this icon. This two-part Experts Exchange video Micro Tutorial s…

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question