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.

Était-ce utile?

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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top