Dienst starten/ Dienst beenden - ohne sichtbares Fenster (Powershell)

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.782
hi, wie kann ich einen Dienst starten & beenden - ohne dass ein Fensterchen unten sichtbar bleibt.

geht das irgendwie mit Powershell?

So dass ich eine Verknpüpfung doppelklicke & dann startet sich der Dienst?

lieben Dank

Julia :)
 
klar geht das
musst nur den dienstnamen/servicenamen vom programm/dienst wissen
 
2 Dateien anlegen mit Dateiendung *.bat. In eine "net start OVRService" (ohne""). In die andere "net stop OVRService" reinschreiben und auf dem Desktop ablegen.
 
net start DIENSTNAME
net stop DIENSTNAME
alles in eine oder jeweils eigene bat-dateien

/edit:
wenn alles in eine
mit && verknüpfen
 
Zuletzt bearbeitet:
Wer ein ähnliches Problem hat, nochmal ein kleiner Bericht:

Code:
@echo off
net start OVRService
pause
Das Ergebnis ist folgendes - funktioniert also nicht:


-> batch als Amdinistrator auführen, dann funktioniert es!

danke euch Azereus & finichgut!


Jetzt möchte ich noch ein Programm aufrufen, nachdem der Befehlt ausgeführt wurde. Doch erstmal muß gewartet werden bis der Dienst gestartet wurde. Wie bekomme ich eine Pause hin? Per timeout wird das im CMD-Fenster angezeigt. Ich möchte es aber komplett unsichtbar ausführen. Geht das besser mit Powershell?

Code:
@echo off
net start OVRService
timeout /T 10 /nobreak
D:\Oculus\Support\oculus-client\OculusClient.exe
exit

Außerdem bleibt das CMD-Fenster solange geöffnet, wie ich die Anwendung dann offen habe. Das Fenster soll geschlossen werden & erst gar nicht auftauchen.

O.k., der wartet eh, bis der Dienst gestartet ist:

Code:
@echo off
net start OVRService
D:\Oculus\Support\oculus-client\OculusClient.exe
net stop OVRService
exit
Trotzdem habe ich das Problem, dass das CMD-Fenster angezeigt wird & offen bleibt.

Das geht zwar weg mit dem Tool batToExe-Converter. Jedoch muß ich dann, weil ich das Admin-flag benötige, jedes mal beim Start 2 Extraklicks machen, umd zu bestätigen, dass ich die Datei wirklich als Administrator auführen möchte. Das sollte mit Powershell besser gehen - aber wie?
 
Zuletzt bearbeitet:
Wüsste nicht wie man die Problematik mit PS umgehen kann. Solche Scripts müssen in so einem Fall als Admin gestartet werden, oder sich selber nochmal als Admin aufrufen, was aber auch mit Batch machbar ist. Schnell, schick und realtiv unkompliziert, könntest Du dir mittels NSIS + SimpleService-Plugin so einen Launcher basteln. So bleiben dann auch keine hässlichen Konsolenfenster offen. Ein entsprechendes Compiling-Script könnte so aussehen:

Code:
SetCompressor LZMA

Function .onInit

	ReadRegStr $INSTDIR HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OculusClient.exe" "Path"
	IfFileExists $INSTDIR\OculusClient.exe A 0
	SetRegView 64
	ReadRegStr $INSTDIR HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\oodcmd.exe" "Path"
	IfFileExists $INSTDIR\OculusClient.exe A 0
	MessageBox MB_OK "Can't locate OculusClient.exe)"
	Quit
A:
FunctionEnd


Section

	simpleSC::Start "OVRservice"
	ExecWait "$INSTDIR\OculusClient.exe"
	simpleSC::Stop "OVRservice"
	Quit

SectionEnd

Icon oculus.ico
SilentInstall Silent
OutFile "Oculus_Launcher.exe"
RequestexecutionLevel admin

LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
VIProductVersion 1.0.0.0
VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion ""
VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyName "Jule"
VIAddVersionKey /LANG=${LANG_ENGLISH} Productversion 1.0
VIAddVersionKey /LANG=${LANG_ENGLISH} ProductName "Oculus Launcher "
VIAddVersionKey /LANG=${LANG_ENGLISH} FileDescription "Oculus Launcher "
VIAddVersionKey /LANG=${LANG_ENGLISH} LegalCopyright ""
Name "Oculus Launcher "

Das Erkennen der executable location wird in deinem Fall wohl so nicht funktionieren. Den Registry-Pfad wirst du da anpassen müssen. Im Zweifel kannst du die Funktion aber auch einfach rausnehmen, und wie in deiner Batch den Pfad selber angeben. Wenn dir das dann doch zuviel ist, sollte es reichen, dein Batchfile wie folgt zu beginnen:

Code:
@echo off & whoami /groups | find "S-1-16-12288" >nul || (
echo createobject("shell.application"^).shellexecute"%~s0",,,"runas"^&createobject("scripting.filesystemobject"^).getfile("%tmp%\uac.vbs"^).delete> "%tmp%\uac.vbs"
start "" "%tmp%\uac.vbs"&exit
)
 
oh danke, a d00d. Das mit der Batch funktioniert leider so nicht. Dann kommt ein solches Fenster: https://jkroeger.files.wordpress.com/2010/07/chrome_start.png

"möchten sie zulassen dass durch das folgende programm änderungen an diesem computer vorgenommen werden?". Klar könnte ich die Sicherheitsstufe runterstellen in Windows, aber das ist ja nicht Sinn und Zweck.

Und einen Installer möchte ich eigentlich ungern. Soweit ich das script lese, wird bei dem NSIS-Teil irgendwas installiert. Und wo ist dann die exe? Wie heißt sie? Wird die alte exe überschrieben? Aber supi Company name ^^
 
Zuletzt bearbeitet:
Bei der NSIS geschichte wird nichts installiert, auch wenn der Name das suggeriert und es eigentlich für Installationsroutinen gemacht ist. (Außer NSIS selber, wenn man das Setup nicht einfach mit 7-Zip entpackt.)
Funktional ist das das gleiche wie dein Batchfile, nur eben als .exe, ohne Konsolenfenster, mit eigenem Icon.

Der UAC-Prompt in deinem Bild, ist ja gewollt. Daher funktioniert das mit der Batch schon. Ich dachte es ging nur darum, sich das 'Als Admin ausführen' zu sparen. Du willst anscheinend, dass er ohne diesen Bestätigungsdialog als Admin startet. Was so nicht sinnvoll möglich ist, außer du kennst das Passwort für das Admin-Konto. Dann könntest du die Befehle in deinem Batchfile einfach über runas /savecred ausführen. Wo das PW dann einmalig abgefragt wird.

Code:
runas /savecred /user:Administrator net start "OVRService"
OculusClient.exe
runas /savecred /user:Administrator sc stop "OVRService"

Da in den meisten Konfigurationen aber kein eigenes Admin-PW gesetzt wurde und man dieses dann auch bei jedem UAC-Prompt, wie den in deinem Bild, eingeben müsste, macht das so wahrscheinlich keinen Sinn. Also entweder UAC deaktivieren, oder damit leben, dass es eben so eine Abfrage gibt, wenn man mit einem Nicht-Admin-Konto unterwegs ist. Denn zum Starten/Beenden von Diensten braucht es i.d.R. nunmal administrativen Zugriff.
 
Zuletzt bearbeitet von einem Moderator:
Ich würde alles mit der Aufgabenplanung machen, geht immer, wie gewünscht.
Ach nee, die UAC poppt auch hier auf, wenn der Planer-Shortcut ausgeführt wird.
 
Zuletzt bearbeitet:
A d00d schrieb:
Bei der NSIS geschichte wird nichts installiert, auch wenn der Name das suggeriert und es eigentlich für Installationsroutinen gemacht ist. (Außer NSIS selber, wenn man das Setup nicht einfach mit 7-Zip entpackt.)
Funktional ist das das gleiche wie dein Batchfile, nur eben als .exe, ohne Konsolenfenster, mit eigenem Icon.
Das geht ja mit BatchToExe-Converter ebenfalls, samt Icon, ohne Konsolenfenster ohne als Admin starten zu müssen. Letzteres wird voreingestellt in der exe. Die Frage kommt natürich trotzdem.

A d00d schrieb:
Der UAC-Prompt in deinem Bild, ist ja gewollt. Daher funktioniert das mit der Batch schon. Ich dachte es ging nur darum, sich das 'Als Admin ausführen' zu sparen.
Ob jetzt der UAC-Promt oder Admin-Promt kommt ist mir Wurst. Ich möchte gar keinen Promt. Unnütze Klickarbeit. Manchmal startet man noch eben & ist schon im Begriff zu gehen, drückt noch im Weggehen die Returntaste - kommt wieder an den Schreibtisch & da steht sone Abfrage - nervig.

A d00d schrieb:
Dann könntest du die Befehle in deinem Batchfile einfach über runas /savecred ausführen. Wo das PW dann einmalig abgefragt wird.

Code:
runas /savecred /user:Administrator net start "OVRService"
OculusClient.exe
runas /savecred /user:Administrator sc stop "OVRService"
Admin-Passwort eingeben - wäre ja noch aufwändiger jedes Mal. Habe auch keines. Kann man das Adminpasswort nicht einfach übergeben in der Batch?

Ich meine mal gelesen zu haben, dass es mit Powershell geht. Irgendwie beim 1. Mal mußm an sagen zulassen. Und dann fragt der nie wieder. Auch nach Windows-Neustart nicht. Bis man halt Windows neu installiert.
 
Zuletzt bearbeitet:
Wenn du ein Passwort für deinen Benutzeraccount hast, dann ist das über die Aufgabenplanung möglich.

Voraussetzung:
Die PowerShell Ausführungsrichtlinie für deinen Benutzer ist mindestens auf RemoteSigned gesetzt.
Code:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Confirm:$false -Scope CurrentUser -Force


Nun zu deinem Anliegen:

  1. Erstelle eine Aufgabe
    2016-08-12 - [18-38-30 Uhr].png
  2. Setze folgende Aktion
    2016-08-12 - [17-19-51 Uhr].png
  3. Nach dem Klick auf OK gib dein Passwort ein
  4. Erstelle folgendes PowerShell-Skript und speichere es irgendwo (aber nicht auf dem Desktop, siehe nächsten Punkt)
    Code:
    $TaskName = 'Start OVRService'  # Name der Aufgabe
    $ServiceName = 'OVRService'   # Name des Dienstes
    $ProcessPath = 'D:\Oculus\Support\oculus-client\OculusClient.exe'   # Pfad zum Programm
    
    If (-not(Get-Service $ServiceName) -or -not(Get-ScheduledTask $TaskName)) { Return } # Wenn Aufgabe oder Dienst nicht vorhanden -> Exit  
    
    $i = 0 # Zähler für Exit-Bedingung
    While ((Get-Service $ServiceName).Status -ne 'Running') { # Solange Dienst nicht den Status 'Running' hat ...     
    	If ($i -lt 10) { $i++ } Else { Return } # Nach 10 Versuchen -> Exit  
    	Start-ScheduledTask -TaskName $TaskName # Starte Aufgabe (=Dienst starten)     
    	Start-Sleep 1 # Warte 1 Sekunde   
    } 
    
    Start-Sleep 1 # Zusätzlicher Timer, falls der Dienst nach dem obigen Sleep-Timer immernoch nicht vollständig gestartet ist     
    Start-Process $ProcessPath # Starte Anwendung
  5. Erstelle auf dem Desktop per Rechtsklick -> Verknüpfung folgende Verküpfung:
    Pfad:
    powershell.exe -WindowStyle Hidden -NoProfile -File "<PfadZumPowerShell-Skript>"

    2016-08-12 - [18-59-17 Uhr].png
  6. Den Verknüpfungs-Namen kannst du nennen wie du möchtest
 
Zuletzt bearbeitet: (Exit-Statement hinzugefügt wegen Loop-Gefahr)
Beim Ausführen von 6. poppt zu keiner Zeit die UAC auf?
Dann kann ichs auch mal verwenden.
 
engine schrieb:
Beim Ausführen von 6. poppt zu keiner Zeit die UAC auf?

Wie meinst du das mit 6.?
Da gehts ja nur um den Verknüpfungs-Dateinamen

Falls du dieses Vorgehen allgemein meinst, dann ja. Es poppt (bei mir) nichts auf <- Höchste UAC-Stufe
 
Zuletzt bearbeitet:
Ich starte momentan eine Aufgabe über deren Verknüpfung und es erscheint die UAC.
Ich probiere es mal mit deinem Vorgehen, wenns klappt ohne UAC, dann ist gut/besser.
Würde dann nämlich automatisiert funktionieren.
 
es funktioniert sogar, ABER...
Der Process ist da, aber keine app, die startet nicht sichtbar.
Aber keine UAC. Ich benutze meinen Benutzernamen wie oben angegeben und mein PW.

Dasselbe Verhalten über die Aufgaben-Verknüpfung, aber die UAC poppt hier auf.

Also funktioniert es mit dem Powershell-Script ohne UAC, jedoch ist die app in beiden Fällen nicht sichtbar, nur der Process.
Es ist RealTemp.exe

Ach, einfach in der Aufgabenplanung nicht mit dem eigenen Benutzer anmelden, sondern nur die oberste Option mit dem eigenen Benutzer wählen, also ohne PW und "mit höchsten Privilegien ausführen" wählen.
Es klappt prima mit dem PS, ohne UAC ! THX !

Und ;):
Die Ausführungsrichtlinie ist kein Sicherheitssystem, das Benutzeraktionen beschränkt. Benutzer können eine solche Richtlinie problemlos umgehen, indem sie den Inhalt des Skripts in der Befehlszeile eingeben, wenn sie kein Skript ausführen dürfen. Stattdessen hilft die Ausführungsrichtlinie Benutzern bei der Festlegung von grundlegenden Regeln und verhindert, dass sie diese unbeabsichtigt verletzen.
https://technet.microsoft.com/de-de/library/hh847748.aspx
 
Zuletzt bearbeitet:
engine schrieb:
Die Ausführungsrichtlinie ist kein Sicherheitssystem, das Benutzeraktionen beschränkt. Benutzer können eine solche Richtlinie problemlos umgehen,indem sie den Inhalt des Skripts in der Befehlszeile eingeben, wenn sie kein Skript ausführen dürfen.

Aber da es sich hier um ein Skript (.ps1) handelt, muss die ExecutionPolicy gesenkt werden ;)
 
Zurück
Oben