' Kod ponownie uruchamia usug, zatrzymujc najpierw wszystkie
' zalene od niej usugi, a nastpnie j sam.
' W dalszej kolejnoci uaktywniana jest usuga, a nastpnie 
' wszystkie usugi od niej zalene

Option Explicit

' ------ KONFIGURACJA SKRYPTU ------
Dim strComputer : strComputer = "."              ' np. fs-rtp01
Dim strSvcName  : strSvcName  = "<NazwaUsugi>"  ' np. dnscache
' ------ KONIEC KONFIGURACJI ---------
Dim objWMI : set objWMI = GetObject("winmgmts:\\" & strComputer & _
                                    "\root\cimv2")
Dim objService: set objService = objWMI.Get("Win32_Service.Name='" & _
                                            strSvcName & "'")

WScript.Echo "Ponowne uruchamianie usugi " & objService.Name & "..."
RecursiveServiceStop  objService
RecursiveServiceStart objService
WScript.Echo "Operacja ponownego uruchamiania usugi zostaa zakoczona powodzeniem."

Function RecursiveServiceStop ( objSvc ) 

   Dim colServices : set colServices = objWMI.ExecQuery("Associators of " _
                 & "{Win32_Service.Name='" & objSvc.Name & "'} Where " _
                 & "AssocClass=Win32_DependentService Role=Antecedent" )
   Dim objS
   for each objS in colServices
      RecursiveServiceStop objS
   next

   Dim intRC : intRC = objSvc.StopService
   WScript.Sleep 5000  ' zatrzymywanie usugi potrwa 5 sekund
   if intRC > 0 then
      WScript.Echo " Podczas zatrzymywania usugi wystpi bd: " & objSvc.Name
      WScript.Quit
   else 
      WScript.Echo " Operacja zatrzymywania usugi zostaa zakoczona powodzeniem: " & objSvc.Name
   end if
End Function

Function RecursiveServiceStart ( objSvc )

   Dim intRC : intRC = objSvc.StartService
   if intRC > 0 then
      WScript.Echo " Podczas uruchamiania usugi wystpi bd: " & objSvc.Name
      WScript.Quit
   else
      WScript.Echo " Operacja uruchamiania usugi zostaa zakoczona powodzeniem: " & objSvc.Name
   end if

   Dim colServices : set colServices = objWMI.ExecQuery("Associators of " _
                 & "{Win32_Service.Name='" & objSvc.Name & "'} Where " _
                 & "AssocClass=Win32_DependentService Role=Antecedent" )
   Dim objS
   for each objS in colServices
      RecursiveServiceStart objS
   next

End Function
