robbe83
Goto Top

Konfigurieren eines Dienstes per Script mit WMI oder WSH

Hallo,

ich bin etwas am verzweifeln da mir google nicht so ganz die Antworten ausgibt die ich mir so vorstelle bzw. mit denen ich arbeiten kann.
Zudem bin ich erst seit knapp 2 Wochen dabei mir etwas mehr über das Scripten beizubringen - also bitte nehmt etwas Rücksicht auf meine nunja teilweise unbedarfte Fragestellung.

Ich bin dabei ein Script mit WSH/WMI für eine automatische Installation eines Programms zu erstellen.

Wenn es relevant ist das Programm ist der DBInventor Standalone Client von Mechworks.

Das Installationsprogramm, welches aus einer *.msi besteht, habe ich schon meinen wünschen entsprechend der Installationsroutine angepasst.

Des weiteren habe ich das Script schon soweit das es mir das Programm automatisch installiert, danach dann die Registryeinträge für die Datenbank erstellt und anschließend den Lizenzdienst installiert.

Soweit sogut.

Mein Problem ist nun allerdings das nach der Installation des Dienstes dieser

1. Nicht gestartet ist
2. die Startbedingung auf manuell steht
3. das lokale Anmeldekonto als Startkonto benutzt wird.

Ich möchte aber gern folgendes Realisieren:

1. Der Dienst soll auf die Startbedingung "Automatisch" gestellt werden
2. Das Anmeldekonto soll wie folgt aussehen (Domäne\Administrator, Passwort: XXXXXXX)
3. der Dienst soll gestartet werden

Den Punkt 1. und tweilweise den Punkt 2. habe ich schon mit folgendem Programmcode hinbekommen.

wsh.RegWrite "HKLM\System\CurrentControlSet\Services\DBWServer\Start", 2, "REG_DWORD"
wsh.RegWrite "HKLM\System\CurrentControlSet\Services\DBWServer\Objectname", "domäne\administrator"


Was mir jetzt aber fehlt ist folgendes:

1. Möchte ich gern per Script das Passwort für die Anmeldung hinterlegen
2. Möchte ich den Dienst direkt aus dem Script raus starten


Wie man Dienste startet habe ich schon mehrfach über Google gefunden. Wie man allerdings die Benutzerdaten hinterlegt da scheiden sich die Geister - oder ich bin einfach zu doof das zu verstehen was mir google da ausgibt *g*.

Entscheidend für eine Antwort ist vielleicht zu wissen das ich kein Programmierer bin und mich auch bisher nicht weiter mit Programmierung auseinander gesetzt habe.

Content-ID: 203992

Url: https://administrator.de/contentid/203992

Ausgedruckt am: 23.11.2024 um 14:11 Uhr

colinardo
colinardo 26.03.2013 aktualisiert um 16:26:40 Uhr
Goto Top
Folgende Batch-Befehle sollte dir helfen:
Beim sc-Befehl ist das Leerzeichen hinter den Gleichheits-Zeichen zu beachten!
sc config  Service obj= "Domain\User" password= "xxxxxx" start= "auto"  
net start Service
http://technet.microsoft.com/de-de/library/cc990290(v=ws.10).aspx

das ganze dann in VBS:
Set WshShell = WScript.CreateObject("WScript.Shell")  
WshShell.Run "sc.exe config Service obj= " & chr(34) & "Domain\User"  & chr(34) & " password= " & chr(34) & "xxxxxx" & " start= " & chr(34) & "auto" & chr(34)  
WshShell.Run "net.exe start Service"  

Gruss Uwe
Robbe83
Robbe83 26.03.2013 um 16:25:22 Uhr
Goto Top
Damit habe ich es schon versucht.

Das Problem daran ist nur das es zwar den Starttyp ändert und die Benutzerdaten hinterlegt bzw. auch versucht den Dienst zu starten.

Nur kommt beim Batchaufruf der Fehler das dass Starten des Dienstes wegen falscher Anmeldedaten nicht ausgeführt werden konnte.

Wenn ich dann hingehe und manuell das Passwort oder auch nur den gleichen Benutzernamen eingebe (per Hand) - erst dann funktioniert das ganze.

Eine Idee woran das liegen könnte?

Problem an der batch ist auch das ich das Passwort unverschlüsselt und gut lesbar in der batch stehen habe - was ich eigentlich vermeiden möchte.

Ein erstelltes WSH Script könnte ich verschlüsseln lassen, so das es nicht mehr für die normalen User hier in der Firma lesbar ist.

Deswegen würde mich stark eine Lösung über WSH bzw. WMI interessieren.

Mfg

Robert
colinardo
colinardo 26.03.2013, aktualisiert am 27.03.2013 um 09:25:58 Uhr
Goto Top
Per VBS und WMI kannst du dies folgendermasser machen:
In Zeile 3 musst du noch den Dienstnamen ändern und die Benutzerdaten für den Service in Zeile 6.
strComputer = "."  
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE Name = 'DBWServer'")  

For Each objService In colServices
    errServiceChange = objService.Change(,,,,"Automatic",,"Domain\User","DeinPassword")  
    if errServiceChange = 0 then
      wscript.echo "Service erfolgreich geändert!"  
    else
      wscript.echo "Serviceänderung fehlgeschlagen, Fehlercode:" & errServiceChange  
    end if
    errServiceStart = objService.StartService()  
Next

Wenn du willst das der Dienst mit Systemrechten läuft musst du Zeile 6 wie folget ändern:
errServiceChange = objService.Change(,,,,"Automatic",,"LocalSystem","")  

Zur Info: Ein Programm in dem viele Snippets für die Programmierung mit WMI und VBS enthalten sind ist VBSEdit

Grüße Uwe
Robbe83
Robbe83 27.03.2013 aktualisiert um 09:09:52 Uhr
Goto Top
Moin,

erstmal Danke für die schnellen Antworten.

Ich habe grade mal die zweite Möglichkeit direkt per WMI getestet und komme aber leider nur zu foldenem Ergebnis.

Und zwar schreibt er mir das der Typ in Zeile 6 nicht passt - sprich er hat ein Problem mit
"...
errServiceChange = objService.Change( , , , , ,"Auto" , "Domain\User" , "DeinPassword")
..."

das "errServiceChange" passt ihm da nicht.

Eine Idee woran das liegen könnte?

Mfg

Robert

EDIT:

Also es funktioniert jetzt so halbwegs.

Hab bei ( , , , , , "Auto".....) noch ein "," eingefügt und so startet er zumindestens dann schonmal den Dienst und meldet keinen Fehler mehr.

Allerdings findet der Ausdruck "errServiceChange" dann keinerlei Beachtung mehr.

Die "," sind Platzhalter richtig? - Kann es ev. sein das die Konstellation der Platzhalter anders verlaufen muss?
colinardo
colinardo 27.03.2013 aktualisiert um 09:29:47 Uhr
Goto Top
Habe die Fehler oben korrigiert. Die Parameterreihenfolge war nicht mehr ganz aktuell und "Auto" muss "Automatic" heißen.
Habe noch eine Fehlerabfrage mit eingebaut.
Die Fehlercodes die die Change()-Methode zurückgeben kann sind folgende:
0 Success
1 Not Supported
2 Access Denied
3 Dependent Services Running
4 Invalid Service Control
5 Service Cannot Accept Control
6 Service Not Active
7 Service Request Timeout
8 Unknown Failure
9 Path Not Found
10 Service Already Running
11 Service Database Locked
12 Service Dependency Deleted
13 Service Dependency Failure
14 Service Disabled
15 Service Logon Failure
16 Service Marked For Deletion
17 Service No Thread
18 Status Circular Dependency
19 Status Duplicate Name
20 Status Invalid Name
21 Status Invalid Parameter
22 Status Invalid Service Account
23 Status Service Exists
24 Service Already Paused
Robbe83
Robbe83 27.03.2013 um 10:07:43 Uhr
Goto Top
Moin,

also jetzt funktioniert es endlich.

Das Problem das der Dienst nicht starten kann besteht aber immernoch.

Habe nun herrausgefunden das dass Problem darin besteht, das wenn ich die Benutzerdaten nochmal erneut eingebe -
Windows dem Konto das Recht "als Dienst anmelden" einräumt.

Erst danach kann der Dienst mit den Benutzerdaten ordentlich gestaret werden.

Gibt es da eine Möglichkeit gleich im Script dem Benutzerkonto dieses Recht einzuräumen??

Mfg

Robert
colinardo
colinardo 27.03.2013 aktualisiert um 10:28:06 Uhr
Goto Top
Dazu nehme man das Tool NTRIGHTS aus dem NT Ressource Kit und führen folgende Befehlszeile aus.
ntrights.exe -u domain\domain-user +r SeServiceLogonRight

oder folge dieser Anleitung für das Tool Security Configuration Tool Set
http://technet.microsoft.com/en-us/library/bb742512.aspx
und hier
http://social.technet.microsoft.com/Forums/en-US/winserverGP/thread/bf5 ...

Grüße Uwe
Robbe83
Robbe83 27.03.2013 um 13:21:53 Uhr
Goto Top
Sooo...

.. also das Script funktioniert jetzt perfekt. Die Installation läuft ohne Fehler durch, der Dienst startet ohne Probleme und das ganze Programm läuft einwandfrei!

Danke dir für deine kompetente und vorallem sehr schnelle Hilfe.

Mfg

Robert