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

'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




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