nagita
Goto Top

Dienst pausieren

Hallo
ich hatte zu dem Thema schon einmal etwas gefragt.
Leider hat mich das nicht so richtig weiter gebracht.
Um einen Dienst zu pausieren und später wieder weiterlaufen zu lassen, habe
ich mit PHP eine Lösung gefunden.
Dort brauche ich auch keinerlei Admin-Rechte.
Es funktioniert:
$service = "FttermService";  
if (!isset($auswahl)) { $auswahl = ""; }  

echo "Name = " . shell_exec("powershell -EP Bypass (get-service $service).Name") . "<br>";  
echo "displayName = " . shell_exec("powershell -EP Bypass (get-service $service).displayName") . "<br>";  
echo "Status = " . shell_exec("powershell -EP Bypass (get-service $service).Status") . "<br>";  

echo "Auswahl = $auswahl<br>";  

if ($auswahl == "pause") {  
	shell_exec("powershell -EP Bypass (Suspend-service $service)");  
	echo "Status = " . shell_exec("powershell -EP Bypass (get-service $service).Status") . "<br>";  
}

if ($auswahl == "weiter") {  
	shell_exec("powershell -EP Bypass (Resume-service $service)");  
	echo "Status = " . shell_exec("powershell -EP Bypass (get-service $service).Status") . "<br>";  
}

Wenn ich dem Programm als Parameter auswahl pause mitgebe, wird der Dienst auf Pause gesetzt.
Wenn ich weiter mitgebe, wird er wieder gestartet.
So weit, so gut.

So möchte ich es gerne in VB haben.
Hier mal ein Testcode:

Sub Test()
   Dim Dienst = "FttermService"  
   Dim services
   Dim objService
   
   services = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select State from Win32_Service where Name = '" & Dienst & "'")  
   For Each objService In services
      GetServiceState = objService.State
   Next

   if GetServiceState = "Running" then  
      WshShell = WScript.CreateObject("WScript.Shell")  
      wshshell.run "net send %computername% + Nachricht "  
      wshshell.run "C:\Windows\System32\sc.exe pause " & Dienst  
   end if

End Sub

Mal abgesehen davon, dass ein Admin-Fenster aufgeht, was ich nicht haben möchte, funktioniert es nicht.
Habe schon etliche Sachen ausprobiert. Nix funzt.

Ich weiß, ich nerve vielleicht mit diesem Thema, aber ich weiß mir halt sonst nicht zu helfen.

noch zur Indo:
Der Dienst FttermService hat den Starttyp 'Manuell' und den Status 'wird ausgeführt'
Egal, ob auf dem lokalem System oder einem Server, der PHP-Source funzt.

Content-ID: 716572449

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

colinardo
colinardo 17.06.2021 aktualisiert um 16:06:33 Uhr
Goto Top
Servus
Zitat von @nagita:
Um einen Dienst zu pausieren und später wieder weiterlaufen zu lassen, habe
ich mit PHP eine Lösung gefunden.
Dort brauche ich auch keinerlei Admin-Rechte.
Und warum, weil der PHP Dienst bei dir wohl schon elevated läuft oder in einer administrativen Gruppe Mitglied ist ( eigentlich ein Sicherheitstechnischer GAU) , deshalb ...
Mal abgesehen davon, dass ein Admin-Fenster aufgeht, was ich nicht haben möchte, funktioniert es nicht.
Du musst dem User der das Script ausführt nur die Berechtigungen zum Starten/Stoppen/Pausieren geben dann funktioniert das auch ohne Admin Rechte bzw. Elevation.
Bitte lies dazu folgenden Post aufmerksam: Windows 2019 Server Berechtigungen für das starten und stoppen von Diensten vergeben
Also erst die Rechte für den User oder die Gruppe vergeben und danach in die Doku geguckt und folgendes in der Win32_Service Klasse gefunden Win32_Service PauseService() Method
womit man dann folgendes abfeuert
dim Dienst, services, objService
Dienst = "BlaBla"  
services = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Service where Name = '" & Dienst & "'")  
For Each objService In services
    objService.PauseService
Next
Fertig, gewusst wie, du musst nur ab und zu die Links auch lesen die man dir an die Hand gibt face-smile!


Grüße Uwe
nagita
nagita 17.06.2021 um 16:03:35 Uhr
Goto Top
Danke für die Info.
Habe ab Morgen das ganze WE Zeit und werde mir das genau anschauen.