'v5.5*********************************************************** ' File: wmi-VBSalsService.vbs ' Autor: dieseyer@gmx.de ' dieseyer.de ' ' Das Skript zeigt, wie sich ein VBScript als Dienst eintragen ' lässt, der vor der Benutzeranmeldung gestartet wird. ' ' Im Dienstnamen darf kein Leerzeichen (Space) enthalten sein! ' ' Richtige Dienste bzw. Services melden an den Dienstmanager ' "etwas" zurück. Einfache Skripte können dies nicht. Aus diesem ' Grund wird ein Skript gestartet, das ein anderes startet. Der ' Dienstmanager beendet nämlich Dienste, die keine Meldungen ' an ihn zurück geben. ' Dieses Startskript "C:\test\VBSstart.vbs" besteht aus nur einer ' Zeile: ' CreateObject("Wscript.Shell").Run "C:\test\richtiges.vbs" ' ' Am Ende des Skripts "wmi-VBSalsService.vbs" wird der Dienst ' auch gleich wieder entfernt. '*************************************************************** ' Skript erstellen: http://msdn.microsoft.com/library/en-us/wmisdk/wmi/create_method_in_class_win32_baseservice.asp Option Explicit Call ServiceErstellen WScript.Sleep 2*1000 Call ServiceStarten WScript.Sleep 2*1000 Call ServiceEntfernen MsgBox WScript.ScriptName & " - Skriptende.", , "0038 :: " & WScript.ScriptName WScript.Quit '********************************************************* Sub ServiceErstellen '********************************************************* Const Dienst = "A1Service" Const Progr = "wscript.exe C:\test\VBSstart.vbs" Const INTERACTIVE_YES = True Const INTERACTIVE_NOT = False Dim objWMIService, colStoppedServices, colServices, objService Dim Txt ' Test, ob Dienst schon installiert ist ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colStoppedServices = objWMIService.ExecQuery ("Select * From Win32_Service" ) For Each objService in colStoppedServices If InStr( objService.DisplayName, Dienst ) > 0 Then Txt = """" & objService.DisplayName & """ (" & objService.State & ")" Next If Len( Txt ) > 5 Then MsgBox Txt & " existiert bereits", , "0064 :: " & WScript.ScriptName : Exit Sub ' Dienst installieren ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set objService = objWMIService.Get("Win32_BaseService") Txt = objService.Create( Dienst, Dienst, Progr, , , "Automatic", INTERACTIVE_NOT ) MsgBox "Der Dienst """ & Dienst & """ wurde erstellt: RC=" & Txt, , "0072 :: " & WScript.ScriptName Txt = "" ' Test, ob Dienst jetzt installiert ist ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colStoppedServices = objWMIService.ExecQuery ("Select * From Win32_Service" ) For Each objService in colStoppedServices If InStr( objService.DisplayName, Dienst ) > 0 Then Txt = """" & objService.DisplayName & """ (" & objService.State & ")" Next MsgBox Txt & " ist jetzt installiert.", , "0083 :: " & WScript.ScriptName End Sub ' ServiceErstellen '********************************************************* Sub ServiceEntfernen '********************************************************* Const Dienst = "A1Service" Dim colListOfServices Dim colStoppedServices, objWMIService, objService Dim Txt Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colListOfServices = objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & Dienst & "'") For Each objService in colListOfServices objService.StopService() objService.Delete() Next Txt = "" ' Test, ob Dienst jetzt installiert ist ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colStoppedServices = objWMIService.ExecQuery ("Select * From Win32_Service" ) For Each objService in colStoppedServices If InStr( objService.DisplayName, Dienst ) > 0 Then Txt = """" & objService.DisplayName & """ (" & objService.State & ")" Next If Len( Txt ) > 5 Then MsgBox Txt & " lässt sich nicht entfernen.", , "0113 :: " & WScript.ScriptName Else MsgBox "Der Dienst """ & Dienst & """ ist jetzt entfernt.", , "0115 :: " & WScript.ScriptName End If End Sub ' ServiceEntfernen '********************************************************* Sub ServiceStarten '********************************************************* Const Dienst = "A1Service" Dim objWMIService, colStoppedServices, colServices, objService Dim Txt ' Test, ob Dienst schon installiert ist ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colStoppedServices = objWMIService.ExecQuery ("Select * From Win32_Service" ) For Each objService in colStoppedServices If InStr( objService.DisplayName, Dienst ) > 0 Then Txt = """" & objService.DisplayName & """ (" & objService.State & ")" Next If Len( Txt ) > 5 Then MsgBox Txt & " existiert.", , "0138 :: " & WScript.ScriptName ' Dienst starten ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'") For Each objService in colServices Txt = objService.StartService() If Txt <> 0 Then MsgBox "Fehler beim starten des Dienstes """ & Dienst & """" & vbCRLF & "Error code = " & Txt, , "0148 :: " & WScript.ScriptName Else MsgBox "Dienst """ & Dienst & """ ist gestartet", , "0150 :: " & WScript.ScriptName End If Next Txt = "" ' Test, ob Dienst jetzt installiert ist ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=Impersonate}!\\.\root\cimv2") Set colStoppedServices = objWMIService.ExecQuery ("Select * From Win32_Service" ) For Each objService in colStoppedServices If InStr( objService.DisplayName, Dienst ) > 0 Then Txt = """" & objService.DisplayName & """ (" & objService.State & ")" Next MsgBox Txt & " ist vorhanden.", , "0164 :: " & WScript.ScriptName End Sub ' ServiceStarten