Wie kann ich einen Windows-Dienst über ein Linux-Bash-Skript starten / stoppen?

3

Ich möchte ein Skript erstellen, das über einen SSH-Server gestartet wird, um einen Windows-Dienst zu starten / stoppen. Der SSH-Benutzer ist Teil der Administratorgruppe. Beim Ausführen des Skripts erhalte ich jedoch die Fehlermeldung, dass der Dienst nicht gestartet werden kann.

Wie kann ich sicherstellen, dass mein Skript mit Administratorrechten gestartet wird? Ich habe ähnliche Skripte in Linux mit gemacht sudo service myservice start/stop. Ich suche ein Äquivalent in Windows, falls es so etwas gibt.

Meine ps1-Shell sieht ungefähr so ​​aus:

function start() { Start-Service MyService // verify service started here }

function stop() { Stop-Service MyService // verify service stopped }

function status() { // Return Running/Stopped for MyService }
Byob
quelle
Ich bin mir nicht sicher, wie Sie es mit Linux und SSH machen würden. Es reicht nicht aus, wenn der Benutzer ein Administrator ist. Die Umgebung muss ebenfalls verbessert werden. Zum Beispiel funktioniert es nicht, nur eine Eingabeaufforderung zu öffnen und net start <service> einzugeben, da die Eingabeaufforderung als Administrator ausgeführt werden muss.
Keltari
Vielen Dank für Ihre Antworten! Ich habe mir überlegt, die wmi-API zu verwenden, habe sie jedoch angehalten, da dies das Einspielen neuer Software in die Umgebung erfordert. Dies ist ein umständlicher Vorgang gezielter Service. Für die SSH-Konnektivität zwischen Windows / Linux habe ich einen Windows-SSH-Server installiert und die Authentifizierung mit öffentlichen Schlüsseln verwendet, damit sich mein Benutzer über ein Linux-Skript anmelden kann.
Byob
Zur Verdeutlichung: Die Dienststeuerung erfolgte über Windows Batch mit 'sc <query | start | stop> MyServiceName '
Byob

Antworten:

3

Ich würde das SSH-Skript ein Powershell-Skript starten lassen. Powershell ist in der Lage, sich selbst zu erheben, Dienste zu stoppen und ihren Status zu überprüfen.

Irgendein Pseudocode:

ssh user@server powershell.bat

Wobei powershell.bat über den gesamten erforderlichen Code verfügt, um mit den Diensten das zu tun, was Sie wollen.

tbenz9
quelle
2
Hallo Byob, wenn diese Antwort richtig war, akzeptiere sie bitte als die richtige Antwort, damit sie als gelöst markiert wird.
tbenz9
4

Ich weiß, dass Sie bash / ssh verwenden möchten, aber meiner Erfahrung nach ist die einfachste Möglichkeit, Windows von einer Linux-Box aus zu verwalten, die Verwendung von Python und WMI

http://timgolden.me.uk/python/wmi/index.html

http://timgolden.me.uk/python/wmi/cookbook.html

http://timgolden.me.uk/python/wmi/tutorial.html

import wmi

# Open a connection to a remote machine
c = wmi.WMI (
computer="other_machine",
user="you",
password="something"
)

# start the service
c.<service>.StartService ()

Dies ist der einfachste Weg, den ich kenne, wenn Sie kein BASH / SSH benötigen. Wenn Sie SSH benötigen, wird dies komplizierter, da Python und WMI jetzt auf jedem Computer installiert sein müssen, auf dem Sie dies ausführen möchten Möglicherweise möchten Sie eine Sprache verwenden, die bereits auf jedem Computer installiert ist (VBScript, Powershell usw.). Diese Methode setzt auch voraus, dass Sie den WMI-Dienst auf der Windows-Box aktiviert haben, was einige Administratoren nicht gerne tun.

Linux-Boxen eignen sich hervorragend für die Verwaltung gemischter Umgebungen. Stellen Sie jedoch sicher, dass Sie das richtige Werkzeug für den Job verwenden. Ein Taschenmesser fällt einen Baum, aber eine Kettensäge wurde gebaut, um den Baum zu fällen.

Matty
quelle
"Ein Taschenmesser wird einen Baum fällen, aber eine Kettensäge wurde gebaut, um den Baum zu fällen" - Auf jeden Fall zustimmen -
Byob
1

start = net rpc service start SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

stop = net rpc service stop SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

status = net rpc service status SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

Wenn Ihr Passwort Sonderzeichen enthält, schließen Sie diese mit einem Backslash ab \.

Tötlich
quelle