2014-03-02 3 views
0
sComputer = "." 
Set Runninglist = CreateObject("System.Collections.ArrayList") 
aTargetSvcs= Array ("pageserver","CacheServer","CrystalAPS","CrystalInputFileServer","CrystalOutputFileServer","CrystalReportApplicationServer", "JobServer_Report") 
Set oWMIService = GetObject("winmgmts:" & "{impersonationlevel=impersonate}!\\" _ 
& sComputer & "\root\cimv2") 
Set cServices = oWMIService.ExecQuery("SELECT * FROM Win32_Service") 
For Each oService In cServices 
For Each sTargetSvc In aTargetSvcs 
If LCase(oService.Name) = LCase(sTargetSvc) Then 

If oService.State <> "Started" Then 
Runninglist.Add oService.Name 
    oService.StopService()  
End If 
End if 
Next 
Next 

WScript.Sleep 3000 

For Each oService In cServices 
For Each sTargetSvc In Runninglist 
If LCase(oService.Name) = LCase(sTargetSvc) Then 
oService.StartService() 
End If 
Next 
Next 

목표 :
CrystalAPS
크리스탈 입력 파일 리포지토리 서버
크리스탈 : 나는 그들이 이전에 중지 된 경우에만이 순서 Runninglist에서 서비스를 시작하려면 출력 파일 리포지토리 서버
크리스탈 보고서 응용 프로그램 서버
크리스탈 보고서 작업 서버
크리스탈 캐시 서버
크리스탈 페이지 서버시작/중지 서비스 이전에 실행 한 경우에만

  • WMI 루프 객체는 코드에서 나중에 사용할
  • 저장할 수 있습니다

    1. VBScript를 사전 항목의 안정적 질서를 유지 :
    +0

    그 서비스들 간의 종속성을 정의하는 것이 어떨까요? –

    답변

    0

    나는 두 가지 사실을 악용 할 것

    Option Explicit 
    
    Dim dicSrvOrd : Set dicSrvOrd = CreateObject("Scripting.Dictionary") 
    dicSrvOrd.CompareMode = vbTextCompare 
    Set dicSrvOrd("SQLWriter") = Nothing 
    Set dicSrvOrd("Browser") = Nothing 
    Set dicSrvOrd("Alerter") = Nothing 
    
    Dim oService 
    For Each oService In GetObject("winmgmts:" & "{impersonationlevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_Service") 
        If dicSrvOrd.Exists(oService.Name) Then 
         If "Running" = oService.State Then 
          WScript.Echo "stopping", oService.Name, "(was", oService.State & ")" 
          Set dicSrvOrd(oService.Name) = oService 
         Else 
          WScript.Echo oService.Name, oService.State 
         End If 
        Else 
         ' WScript.Echo "don't care for", oService.Name 
        End If 
    Next 
    WScript.Echo "--------------" 
    Dim sSrv 
    For Each sSrv In dicSrvOrd.Keys() 
        If Not dicSrvOrd(sSrv) Is Nothing Then 
         WScript.Echo "starting", dicSrvOrd(sSrv).Name 
        End If 
    Next 
    

    출력 :

    cscript 22131182.vbs 
    Alerter Stopped 
    stopping Browser (was Running) 
    stopping SQLWriter (was Running) 
    -------------- 
    starting SQLWriter 
    starting Browser 
    
    관련 문제