'*** v8.3 *** www.dieseyer.de ******************************* ' ' Datei: servicestarten.vbs ' Autor: dieseyer@gmx.de ' Auf: www.dieseyer.de ' ' Function ServiceStatus( Dienst ) ' Function ServiceStoppen( Dienst ) ' Function ServiceStarten( Dienst ) ' Function ServiceAuto( Dienst ) mit starten ' Function ServiceManual( Dienst ) mit stoppen ' Function ServiceDeaktivieren( Dienst ) mit stoppen ' ( Sub LogEintrag( LogTxt ) ) ' ' Eine Anforderung zum Stoppen oder Starten eines Dienstes ' kann bis zur Umsetzung etwas dauern - deshalb den Status ' nach einer kleine Pause (.Sleep 15*1000) erneut testen, ' oder wie in: ' ' Function ServiceNeuStarten( Dienst ) ' nach dem Stoppen/Starten eines Dienstes wir in einer ' Do..Loop-Schleife gewartet, bis die Anforderung ("Pending") ' abgeschlossen ist. ' '************************************************************ Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl Dim WshShell : Set WSHShell = CreateObject("Wscript.Shell") Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim WSHNet : Set WSHNet = WScript.CreateObject("WScript.Network") Dim LogDatei : LogDatei = WScript.ScriptFullName & ".log" Dim Titel : Titel = WScript.ScriptName '' WSHShell.Popup "= = = S T A R T = = =", 2, "036 :: " & WScript.ScriptName LogEintrag "" LogEintrag " " LogEintrag "039 :: === S T A R T: " & WScript.ScriptFullName & " ( " & fso.GetFile( WScript.ScriptFullName ).DateLastModified & " )" LogEintrag "040 :: LogDatei: " & LogDatei LogEintrag "041 :: PCname: " & WSHNet.ComputerName LogEintrag "042 :: Angemeldeter User: " & WSHNet.UserName Dim ZwTxt Dim DienstTxt DienstTxt = "Gibts nich" DienstTxt = "Automatische Updates" DienstTxt = "Konfigurationsfreie drahtlose Verbindung" Const VielLog = "-JA" ' "JA" für umfangreiechere LOGs (nicht nur die Ergebnisse) ServiceNeuStarten DienstTxt MsgBox "ServiceNeuStarten (" & DienstTxt & ") beendet.", , "056 :: " & Titel ZwTxt = ServiceStatus( DienstTxt ) WSHShell.Popup ZwTxt, 10, "060 :: " & Titel, 4096 ' LogEintrag "061 :: " & ZwTxt ZwTxt = ServiceDeaktivieren( DienstTxt ) WSHShell.Popup ZwTxt, 10, "064 :: " & Titel, 4096 ' LogEintrag "065 :: " & ZwTxt ZwTxt = ServiceStarten( DienstTxt ) WSHShell.Popup ZwTxt, 10, "068 :: " & Titel, 4096 ' LogEintrag "069 :: " & ZwTxt ZwTxt = ServiceAuto( DienstTxt ) WSHShell.Popup ZwTxt, 10, "072 :: " & Titel, 4096 ' LogEintrag "073 :: " & ZwTxt ZwTxt = ServiceStatus( DienstTxt ) WSHShell.Popup ZwTxt, 10, "076 :: " & Titel, 4096 ' LogEintrag "077 :: " & ZwTxt WSHShell.Popup "= = = E N D E = = =", 2, "080 :: " & WScript.ScriptName LogEintrag "081 :: === E N D E: " & WScript.ScriptFullName & " ( " & fso.GetFile( WScript.ScriptFullName ).DateLastModified & " )" Wscript.Quit '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceNeuStarten( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "096 :: >>> Dienst: """ & Dienst & """ " ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If VielStat = "JA" Then LogEintrag "101 :: >>> Dienst: """ & Dienst & """ " ServiceStoppen( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do If VielStat = "JA" Then LogEintrag "107 :: >>> Dienst: """ & Dienst & """ " Tst = ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If InStr( UCase( Tst ), " PENDING)" ) = 0 Then Exit Do WScript.Sleep 100 Loop If VielStat = "JA" Then LogEintrag "114 :: >>> Dienst: """ & Dienst & """ " ServiceStarten( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do If VielStat = "JA" Then LogEintrag "120 :: >>> Dienst: """ & Dienst & """ " Tst = ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If InStr( UCase( Tst ), " PENDING)" ) = 0 Then Exit Do WScript.Sleep 100 Loop If VielStat = "JA" Then LogEintrag "127 :: >>> Dienst: """ & Dienst & """ " End Function ' ServiceNeuStarten( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceStatus( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ' ServiceStatus = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceStatus( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "143 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "152 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "154 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServiceStatus = """" & Dienst & """ existiert nicht." LogEintrag "159 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "160 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "163 :: ==> """ & Dienst & """ soll getestet werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStatus = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "175 :: " & ServiceStatus If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceStatus( Dienst )" End Function ' ServiceStatus( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceStarten( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService, colServices Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ServiceStarten = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceStarten( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "193 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "202 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "204 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServiceStarten = """" & Dienst & """ existiert nicht." LogEintrag "209 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "210 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "213 :: ==> """ & Dienst & """ soll gestartet werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStarten = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "225 :: " & ServiceStarten ' "richtigen" (Dienst-) Namen starten ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & Dienst & "'") For Each objService in colServices ServiceStarten = objService.StartService() Next Set objWMIService = nothing Set colServices = Nothing Tst = ServiceStarten ' Wenn ServiceStarten Text enthält, gibt es bei "If Tst = 14 Then" einen Fehler If Tst = 0 Then ServiceStarten = ServiceStarten & ": Dienst erfolgreich gestartet." If Tst = 10 Then ServiceStarten = ServiceStarten & ": Dienst war bereits gestartet." If Tst = 14 Then ServiceStarten = ServiceStarten & ": Deaktivierter Dienst wurde nicht gestartet." If VielStat = "JA" Then LogEintrag "241 :: " & ServiceStarten ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStarten = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "253 :: " & ServiceStarten If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceStarten( Dienst )" End Function ' ServiceStarten( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceDeaktivieren( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ServiceDeaktivieren = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceDeaktivieren( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "271 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "280 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "282 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServiceDeaktivieren = """" & Dienst & """ existiert nicht." LogEintrag "287 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "288 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "291 :: ==> """ & Dienst & """ soll deaktiviert werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceDeaktivieren = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "303 :: " & ServiceDeaktivieren ' "richtigen" Dienst (-Namen) setzen auf stoppen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceDeaktivieren = objService.StopService Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "315 :: Reaktion auf """ & Dienst & """ stoppen: " & ServiceDeaktivieren ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceDeaktivieren = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "327 :: " & ServiceDeaktivieren ' "richtigen" Dienst (-Namen) setzen auf "Disabled" ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceDeaktivieren = objService.Change( , , , , "Disabled" ) Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "339 :: Reaktion auf """ & Dienst & """ deaktivieren: " & ServiceDeaktivieren ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceDeaktivieren = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "351 :: " & ServiceDeaktivieren If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceDeaktivieren( Dienst )" End Function ' ServiceDeaktivieren( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceManual( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ServiceManual = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceManual( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "369 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "378 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "380 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServicManual = """" & Dienst & """ existiert nicht." LogEintrag "385 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "386 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "389 :: ==> """ & Dienst & """ soll auf 'manuell' gesetzt werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceManual = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "401 :: " & ServiceManual ' "richtigen" Dienst (-Namen) stoppen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceManual = objService.StopService Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "413 :: Reaktion auf """ & Dienst & """ stoppen: " & ServiceManual ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceManual = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "425 :: " & ServiceManual ' "richtigen" Dienst (-Namen) setzen auf "Manual" ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceManual = objService.Change( , , , , "Manual" ) Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "437 :: Reaktion auf """ & Dienst & """ auf 'manuell' setzen: " & ServiceManual ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceManual = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "449 :: " & ServiceManual If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceManual( Dienst )" End Function ' ServiceManual( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceAuto( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ServiceAuto = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceAuto( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "467 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "476 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "478 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServiceAuto = """" & Dienst & """ existiert nicht." LogEintrag "483 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "484 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "487 :: ==> """ & Dienst & """ soll auf 'Auto' gesetzt werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceAuto = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "499 :: " & ServiceAuto ' "richtigen" Dienst (-Namen) setzen auf "Auto" ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceAuto = objService.Change( , , , , "Automatic" ) Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "511 :: Reaktion auf """ & Dienst & """ auf 'Auto' setzen: " & ServiceAuto ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceAuto = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "523 :: " & ServiceAuto ' "richtigen" Dienst (-Namen) starten ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceAuto = objService.StartService Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "535 :: Reaktion auf """ & Dienst & """ starten: " & ServiceAuto ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceAuto = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "547 :: " & ServiceAuto If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceAuto( Dienst )" End Function ' ServiceAuto( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Function ServiceStoppen( Dienst ) '************************************************************ ' Dienst ist der im Dienstmanager angezeigte Dienstname Dim objWMIService, colListOfServices, objService Dim Tst, VielStat On Error Resume Next : VielStat = VielLog : On Error Goto 0 ' Wenn "VielLog" nicht definiert ist, gibts wenige LOG-Einträge ServiceStoppen = "" If VielStat = "JA" Then LogEintrag " " If VielStat = "JA" Then LogEintrag "--- Start: Function ServiceStoppen( """ & Dienst & """ )" If VielStat = "JA" Then LogEintrag "565 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . ." ' "richtigen" (Dienst-) Namen suchen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("Select * From Win32_Service") Tst = "-OK" For Each objService in colListOfServices If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "574 :: " & Dienst & " hat schon den richtigen Namen." If InStr( UCase( objService.Name) , UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then If VielStat = "JA" Then LogEintrag "576 :: " & Dienst & " heisst 'richtig': " & objService.Name If InStr( UCase( objService.DisplayName), UCase( Dienst ) ) = 1 Then Dienst = objService.Name : Tst = "OK" : Exit For Next If not Tst = "OK" Then ServiceStoppen = """" & Dienst & """ existiert nicht." LogEintrag "581 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "582 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "585 :: ==> """ & Dienst & """ soll gestoppt werden. . ." ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStoppen = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "597 :: " & ServiceStoppen ' "richtigen" Dienst (-Namen) stoppen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStoppen = objService.StopService Next Set objWMIService = nothing Set colListOfServices = nothing If VielStat = "JA" Then LogEintrag "609 :: Reaktion auf """ & Dienst & """ stoppen: " & ServiceStoppen ' "richtigen" Dienst (-Namen) testen ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices ServiceStoppen = " """ & objService.Name & """ steht auf: " & objService.StartMode & " (" & objService.State & ")": Exit For Next Set objWMIService = nothing Set colListOfServices = nothing LogEintrag "621 :: " & ServiceStoppen If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceStoppen( Dienst )" End Function ' ServiceStoppen( Dienst ) '*** v8.3 *** www.dieseyer.de ******************************* Sub LogEintrag( LogTxt ) '************************************************************ Dim fso : Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim FileOut Dim LogDateiX On Error Resume Next LogDateiX = LogDatei ' wurde die Variable LogDatei nicht außerhalb der Prozedur definiert If Err.Number <> 0 Then LogDateiX = WScript.ScriptFullName & ".log" On Error Goto 0 If LogTxt = "" Then ' eine neue .LOG-Datei wird erstellt, eine vorhandene überschrieben Set FileOut = fso.OpenTextFile( LogDateiX, 2, true) FileOut.Close Set FileOut = Nothing Set fso = Nothing Exit Sub End If Set FileOut = fso.OpenTextFile( LogDateiX, 8, true) If LogTxt = vbCRLF Then FileOut.WriteLine ( LogTxt ) ' If not LogTxt = vbCRLF Then FileOut.WriteLine ( Now() & vbTab & LogTxt ) ' If not LogTxt = vbCRLF Then FileOut.WriteLine ( Timer() & " " & LogTxt ) If not LogTxt = vbCRLF Then FileOut.WriteLine ( Now() & " " & LogTxt ) FileOut.Close Set FileOut = Nothing Set fso = Nothing End Sub ' LogEintrag( LogTxt )