'*** 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 '*** v14.5 *** 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 Trace32Log " ", 1 If VielStat = "JA" Then Trace32Log "096 :: >>> Dienst: """ & Dienst & """ ", 1 ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If VielStat = "JA" Then Trace32Log "101 :: >>> Dienst: """ & Dienst & """ ", 1 ServiceStoppen( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do If VielStat = "JA" Then Trace32Log "107 :: >>> Dienst: """ & Dienst & """ ", 1 Tst = ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If InStr( UCase( Tst ), " PENDING)" ) = 0 Then Exit Do WScript.Sleep 100 Loop If VielStat = "JA" Then Trace32Log "114 :: >>> Dienst: """ & Dienst & """ ", 1 ServiceStarten( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do If VielStat = "JA" Then Trace32Log "120 :: >>> Dienst: """ & Dienst & """ ", 1 Tst = ServiceStatus( Dienst ) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If InStr( UCase( Tst ), " PENDING)" ) = 0 Then Exit Do WScript.Sleep 100 Loop If VielStat = "JA" Then Trace32Log "127 :: >>> Dienst: """ & Dienst & """ ", 1 End Function ' ServiceNeuStarten( Dienst ) '*** v14.5 *** 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 Trace32Log " ", 1 If VielStat = "JA" Then Trace32Log "--- Start: Function ServiceStoppen( """ & Dienst & """ )", 1 If VielStat = "JA" Then Trace32Log "143 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . .", 1 ' "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 Trace32Log "152 :: " & Dienst & " hat schon den richtigen Namen.", 1 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 Trace32Log "154 :: " & Dienst & " heisst 'richtig': " & objService.Name, 1 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." Trace32Log "159 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden.", 1 If VielStat = "JA" Then Trace32Log "160 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" ", 1 Exit Function End If If VielStat = "JA" Then Trace32Log "163 :: ==> """ & Dienst & """ soll gestoppt werden. . .", 1 ' "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 Trace32Log "175 :: " & ServiceStoppen, 1 ' "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 Trace32Log "187 :: Reaktion auf """ & Dienst & """ stoppen: " & ServiceStoppen, 1 ' "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 Trace32Log "199 :: " & ServiceStoppen, 1 If VielStat = "JA" Then Trace32Log "--- Ende: Function ServiceStoppen( Dienst )", 1 End Function ' ServiceStoppen( Dienst ) '*** v14.5 *** 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 Trace32Log " ", 1 If VielStat = "JA" Then Trace32Log "--- Start: Function ServiceStatus( """ & Dienst & """ )", 1 If VielStat = "JA" Then Trace32Log "217 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . .", 1 ' "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 Trace32Log "226 :: " & Dienst & " hat schon den richtigen Namen.", 1 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 Trace32Log "228 :: " & Dienst & " heisst 'richtig': " & objService.Name, 1 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." Trace32Log "233 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden.", 1 If VielStat = "JA" Then Trace32Log "234 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" ", 1 Exit Function End If If VielStat = "JA" Then Trace32Log "237 :: ==> """ & Dienst & """ soll getestet werden. . .", 1 ' "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 Trace32Log "249 :: " & ServiceStatus, 1 If VielStat = "JA" Then Trace32Log "--- Ende: Function ServiceStatus( Dienst )", 1 End Function ' ServiceStatus( Dienst ) '*** v14.5 *** 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 Trace32Log " ", 1 If VielStat = "JA" Then Trace32Log "--- Start: Function ServiceStarten( """ & Dienst & """ )", 1 If VielStat = "JA" Then Trace32Log "267 :: von """ & Dienst & """ wird der 'richtige' Name ermittelt . . .", 1 ' "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 Trace32Log "276 :: " & Dienst & " hat schon den richtigen Namen.", 1 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 Trace32Log "278 :: " & Dienst & " heisst 'richtig': " & objService.Name, 1 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." Trace32Log "283 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden.", 1 If VielStat = "JA" Then Trace32Log "284 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" ", 1 Exit Function End If If VielStat = "JA" Then Trace32Log "287 :: ==> """ & Dienst & """ soll gestartet werden. . .", 1 ' "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 Trace32Log "299 :: " & ServiceStarten, 1 ' "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 Trace32Log "315 :: " & ServiceStarten, 1 ' "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 Trace32Log "327 :: " & ServiceStarten, 1 If VielStat = "JA" Then Trace32Log "--- Ende: Function ServiceStarten( Dienst )", 1 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 "347 :: 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 "356 :: " & 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 "358 :: " & 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 "363 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "364 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "367 :: ==> """ & 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 "379 :: " & 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 "391 :: 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 "403 :: " & 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 "415 :: 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 "427 :: " & 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 "445 :: 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 "454 :: " & 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 "456 :: " & 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 "461 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "462 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "465 :: ==> """ & 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 "477 :: " & 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 "489 :: 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 "501 :: " & 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 "513 :: 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 "525 :: " & 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 "543 :: 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 "552 :: " & 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 "554 :: " & 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 "559 :: """ & Dienst & """ existiert nicht - kann also nicht gestartet werden." If VielStat = "JA" Then LogEintrag "560 :: Vorzeitiges Ende ""Function ServiceStarten( Dienst )"" " Exit Function End If If VielStat = "JA" Then LogEintrag "563 :: ==> """ & 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 "575 :: " & 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 "587 :: 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 "599 :: " & 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 "611 :: 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 "623 :: " & ServiceAuto If VielStat = "JA" Then LogEintrag "--- Ende: Function ServiceAuto( Dienst )" End Function ' ServiceAuto( 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 ) '*** v9.C *** www.dieseyer.de ******************************* Sub Trace32Log( LogTxt, ErrType ) '*********************************************************** ' in VBS und HTA verwendbar ' Aufbau einer LOG-Datei für trace32.exe ( SMS Trace; ' ALLES in einer Zeile!): ' ' < ' time="08:12:54.309+-60" ' date="03-14-2008" ' component="SrcUpdateMgr" ' context="" ' type="0" ' thread="1812" ' file="productpackage.cpp:97" ' > ' ' "context=" Info wird nicht angezeigt ' type="0" normale Zeie => NEUE LOG-DATEI - ggf. alte überschreiben !!!!!!!!!!!! ' type="1" normale Zeie ' type="2" gelbe Zeie ' type="3" rote Zeie ' type="F" rote Zeie ' "thread=" kann eine Dezimalzahl aufnehmen; trace32 zeigt ' neben der Dezimalzahl in Klammern die entspr. ' Hexadezimalzahl an - z.B. "33 (0x21)" ' "file=" wird in "Source:" angezeigt ' Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim LogDateiX, TitelX, Tst, Nr On Error Resume Next Tst = KeineLog On Error Goto 0 If UCase( Tst ) = "JA" Then Exit Sub On Error Resume Next TitelX = Titel ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde TitelX = Title ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde If Len( TitelX ) < 2 Then TitelX = document.title ' .hta If Len( TitelX ) < 2 Then TitelX = WScript.ScriptName ' .vbs On Error Goto 0 On Error Resume Next LogDateiX = LogDatei ' wurde die Variable 'LogDatei' nicht außerhalb der Prozedur definiert If Len( LogDateiX ) < 2 Then LogDateiX = WScript.ScriptFullName & ".log" ' .vbs If Len( LogDateiX ) < 2 Then LogDateiX = TitelX & ".log" ' .hta On Error Goto 0 ' MsgBox "LogDateiX: '" & LogDateiX & "'", , "712 :: " Nr = 0 ' Wenn in Thread die Zeilennummer stehen soll: Nr = 999999 If Nr = 0 AND InStr( LogTxt, " :" & ": " ) > 0 Then ' Wenn in Thread die Zeilennummer stehen soll - Voraussetzung ' ist eine ZeilenNr. im Format '22 :: ' Nr = LogTxt Nr = Mid( Nr, 1, InStrRev( Nr, " :" & ": " ) -1 ) ' nach der Zeilennummer Nr = Mid( Nr, InStrRev( Nr, " " ) + 1 ) ' vor der Zeilennummer On Error Resume Next : Tst = Int( Nr ) : On Error Goto 0 ' Zeilennummer als (Integer) Zahl Do ' Tst für Vergleich auf gleiche Länge wie Nr anpassen If Len( Tst ) = Len( Nr ) Then Exit Do Tst = "0" & Tst Loop If "x" & Tst = "x" & Nr Then LogTxt = Replace( LogTxt, Tst & " :" & ": ", "" ) Nr = Int( Nr ) End If End If If Nr = 999999 Then Nr = 0 ' Zwei Nachkommastellen (nach Sekunden) der aktuellen Zeit ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tst = Timer() ' timer() in USA: 1234.22 Tst = Replace( Tst, "," , ".") ' timer() in Deutschland: 98754,12 If InStr( Tst, "." ) = 0 Then Tst = Tst & ".000" Tst = Mid( Tst, InStr( Tst, "." ), 4 ) If Len( Tst ) < 3 Then Tst = Tst & "0" ' Zeitzone ermitteln - neu (v9.C) und immer richtig(er) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim AktDMTF : Set AktDMTF = CreateObject("WbemScripting.SWbemDateTime") AktDMTF.SetVarDate Now(), True : Tst = Tst & Mid( AktDMTF, 22 ) ' : MsgBox Tst, , "746 :: " ' MsgBox "AktDMTF: '" & AktDMTF & "'", , "747 :: " Set AktDMTF = nothing LogTxt = "" LogTxt = LogTxt & "<" LogTxt = LogTxt & "time=""" & Hour( Time() ) & ":" & Minute( Time() ) & ":" & Second( Time() ) & Tst & """ " LogTxt = LogTxt & "date=""" & Month( Date() ) & "-" & Day( Date() ) & "-" & Year( Date() ) & """ " LogTxt = LogTxt & "component=""" & TitelX & """ " LogTxt = LogTxt & "context="""" " LogTxt = LogTxt & "type=""" & ErrType & """ " LogTxt = LogTxt & "thread=""" & Nr & """ " LogTxt = LogTxt & "file=""dieseyer.de"" " LogTxt = LogTxt & ">" Tst = 8 ' LOG-Datei erweitern If ErrType = 0 Then Tst = 2 ' LOG-Datei erneuern (alte löschen, neue erstellen) On Error Resume Next If LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt ) If not LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt ) On Error Goto 0 Set fso = Nothing End Sub ' Trace32Log( LogTxt, ErrType )