Option Explicit
ServerReboot
Sub ServerReboot
Dim arrServers : arrServers = Array("server1", "server2", "server3")
Dim strServer
For Each strServer In arrServers
Reboot strServer
CheckServices strServer
Next
End Sub
Sub Reboot(strServer)
'code to reboot server
' wait until server is no longer reachable via ping
Do While Reachable(strServer)
WScript.Sleep 5000
Loop
' wait until server is reachable via ping
Do While Not Reachable(strServer)
WScript.Sleep 5000
Loop
WScript.Sleep 60000
End Sub
Sub CheckServices(strServer)
Dim strWQL : strWQL = "Select * From Win32_Service Where Name Like 'SynSrv_%' " & _
"And StartMode='Auto'"
Dim objWMIService : Set objWMIService = GetObject("winmgmts:\\" & strServer & "\root\cimv2")
Dim colServices : Set colServices = objWMIService.ExecQuery(strWQL)
Dim intCount : intCount = colServices.Count
Dim serviceItem
Do Until intCount = 0
Set colServices = objWMIService.ExecQuery(strWQL)
For Each serviceItem In colServices
Select Case UCase(serviceItem.State)
Case "RUNNING"
intCount = intCount - 1
Case "STOPPED"
serviceItem.StartService()
End Select
Next
WScript.Sleep 5000
Loop
End Sub
Function Reachable(strComputer)
Dim wmiQuery : wmiQuery = "Select * From Win32_PingStatus Where Address = '" & _
strComputer & "'"
Dim objWMIService : Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Dim objPing : Set objPing = objWMIService.ExecQuery(wmiQuery)
Dim objStatus
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) Or objStatus.Statuscode<>0 Then
Reachable = False
Else
Reachable = True
End If
Next
End Function