Exécuter l'application ou processus sur un ordinateur distant
-
21-08-2019 - |
Question
Je dois exécuter une application ou d'un service sur un ordinateur distant. Je l'ai eu du succès avec psexec de Sysinternals, mais j'enquête et voudrais COMPRE alternatives. Finalement, la commande sera exécutée à partir d'une application Delphi. Merci, Pieter.
La solution
Si vous voulez suivre la route comme Psexec, voici un exemple (avec C ++) source appelé Xcmd.
Vous pouvez télécharger le projet mis à jour Xcmd (maintenant appelé 'The Grim Linker') à partir de SourceForge.
Pour l'essentiel, il extrait un service à l'exécution, copie dans le système distant, il installe en tant que service, se connecte alors à (via des canaux nommés).
L'autre option consiste à utiliser intégré dans les capacités d'exécution à distance de WMI. Voici un exemple dans VBScript que vous pouvez convertir en Delphi. L'exemple ci-dessous exécute le bloc-notes sur le système distant.
' This script provides a function for executing a command on a remote computer
' This uses WMI and requires that you have administrative righs on the remote machine
'
Dim strComputer, strCommandLineToRun
'change the period to an IP Address or computer name
strComputer = "." 'example: strComputer = "192.168.1.105"
'this is the path to the file on the computer whose name/IP address is stored in the strComputer variable
strCommandLineToRun = "c:\windows\system32\calc.exe"
' This calls the function to run the process on a remote computer
RemoteExecute strComputer,"","",strCommandLineToRun
Function RemoteExecute(strServer, strUser, strPassword, CmdLine)
Const Impersonate = 3
RemoteExecute = -1
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword)
Service.Security_.ImpersonationLevel = Impersonate
Set Process = Service.Get("Win32_Process")
result = Process.Create(CmdLine, , , ProcessId)
If (result <> 0) Then
WScript.Echo "Creating Remote Process Failed: " & result
Wscript.Quit
End If
RemoteExecute = ProcessId
End Function
Autres conseils
ssh est un bon choix si vous en streaming quoi que ce soit sensible. Il y a même quelques serveurs logiciels libres sshd pour Windows qui ne reposent pas sur Cygwin.
L'autre possibilité serait d'utiliser les fenêtres de commandes AT les tâches d'horaires via le planificateur Windows. Vous pouvez soumettre des tâches à distance avec la commande aussi longtemps que vous avez un accès administrateur et le service de planification est en cours d'exécution sur l'autre machine. Examiner la syntaxe, il suffit d'ouvrir une fenêtre CMD et tapez AT /? .
par exemple pour exécuter quelque chose sur la machine nommée « serveur » à 4h du matin, il suffit d'entrer la commande
AT \\server 4:00 "c:\something.bat"