Dienste auf einem anderen Computer steuern

Dienste auf einem anderen Computer steuern

Ich schreibe derzeit einen Dienst für Windows und optimiere und aktualisiere ihn häufig auf meinem Testcomputer. Ich möchte ein Skript schreiben, das den Dienst automatisch stoppt, die EXE aktualisiert und den Dienst neu startet. Allerdings habe ich mit diesem Teil mit dem Stoppen und Starten Probleme.

Der Computer, mit dem ich mich verbinde, gehört keiner Domäne an und wir teilen uns keinen Benutzernamen und kein Passwort. Ich denke, das ist das Beste, was ich tun kann, sc.exe \\testsvr stop "myService"aber da ich weder eine Domäne noch gemeinsame Benutzernamen und Passwörter habe, erhalte ich die Meldung „Zugriff verweigert“.

Ich kann den Benutzer ganz einfach hinzufügen, aber ich wollte dies als Lernerfahrung für den Fall, dass ich die Benutzer nicht ändern kann.

Antwort1

Ich würde mir das ansehenPsServicevon Microsoft Sysinternals (es ist Teil des hervorragenden Tool-Sets von Mark Russinovich).

Direkt von der Website:

Usage: psservice [\\computer [-u username] [-p password]] <command> <options>

Für können Sie , , oder als gebräuchlichste Optionen <command>verwenden . Das Schöne an diesem Skript ist, dass es nicht davon abhängt, ob die beiden Maschinen Mitglieder derselben Domäne sind oder über eine andere Vertrauensstellung verfügen.startstoprestart

Antwort2

Nur der Vollständigkeit halber: Wenn Sie dies nur mit Standard-Windows-Tools tun möchten, können Sie zuerst eine IPC-Verbindung zum Remotecomputer herstellen (um ein Sicherheitstoken auf diesem Computer einzurichten) und dann den Befehl „SC“ verwenden:

net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete

Dadurch können Sie die Dienste auf dem Remotecomputer steuern, unabhängig von der Kombination der Arbeitsgruppen-/Domänenmitgliedschaft beider Computer.

Antwort3

Habe es persönlich nie in einer Nicht-Domänenkonfiguration ausprobiert, aber vielleicht SC.exe mit „RunAs“ ausführen und die Anmeldeinformationen für den Zielcomputer verwenden?

Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""

Antwort4

In einer DOMAIN-Umgebung können Sie die NET USE-Befehle verwenden, vorausgesetzt, Ihrem angemeldeten Benutzer, der das Skript ausführt, wurden die entsprechenden Benutzerrechte erteilt. PowerShell ist wahrscheinlich die leistungsstärkste Option, die Sie haben, aber wenn Sie ältere Microsoft-Betriebssysteme verwenden, können bei der Ausführung einiger PowerShell-Befehle Probleme auftreten. Wenn alles Windows 2008 oder neuer ist, würde ich definitiv PowerShell verwenden.

Wenn das keine Option ist, hatte ich mit dem PSTools-Paket viel Erfolg. Wenn Sie sich für diese Option entscheiden, sollten Sie sich, wie Evan bereits erwähnt hat, wahrscheinlich mit dem Dienstprogramm pskill im selben Paket vertraut machen. Einige Dienste werden nicht ordnungsgemäß beendet, wenn Sie remote an ihnen herumfummeln, und dieses kleine Dienstprogramm ist GROSSARTIG, um sie zu beenden.

Nur aus Neugier: In welcher Skriptsprache programmieren Sie das? VBScript? BATch? Perl?

verwandte Informationen