http://dieseyer.de • all rights reserved • © 2011 v11.4

'*** 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 )

http://dieseyer.de • all rights reserved • © 2011 v11.4