web-dev-qa-db-fra.com

Comment exécuter une commande sur un ordinateur distant?

J'ai un dossier partagé sur un serveur et j'ai besoin d'exécuter à distance une commande sur certains fichiers. Comment je fais ça? 

Quels services doivent être exécutés sur le serveur pour que cela fonctionne?

Quelques détails: Seul C # peut être utilisé. Rien ne peut être installé sur le serveur.

20
user53179

Une autre solution consiste à utiliser WMI.NET ou Windows Management Instrumentation

À l'aide de l'espace de noms .NET Framework System.Management, vous pouvez automatiser des tâches administratives à l'aide de Windows Management Instrumentation (WMI).

Exemple de code

var processToRun = new[] { "notepad.exe" };
var connection = new ConnectionOptions();
connection.Username = "username";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);

Si vous rencontrez des problèmes d’authentification, vérifiez la configuration DCOM.

  1. Sur la machine cible, exécutez dcomcnfg à partir de la commande Invite. 
  2. Développer Component Services\Computers\My Computer\DCOM Config
  3. Rechercher une instruction de gestion Windows, identifiée par GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820 (vous pouvez le voir dans la vue détaillée).
  4. Modifiez les propriétés, puis ajoutez le nom d'utilisateur avec lequel vous essayez de vous connecter sous l'onglet autorisations. 
  5. Vous devrez peut-être redémarrer le service ou la machine entière.

REMARQUE: Tous les chemins utilisés pour le processus distant doivent être locaux sur la machine cible.

31
Dennis

Vous pouvez utiliser PsExec de SysInternal.

6
Dirk Vollmar
try
{
    string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\";
    string strFilePath = AppPath + "ABCED120D_XXX.bat";
    System.Diagnostics.Process proc = new System.Diagnostics.Process();

    proc.StartInfo.FileName = strFilePath;
    string pwd = "s44erver";

    proc.StartInfo.Domain = "abcd";
    proc.StartInfo.UserName = "sysfaomyulm";

    System.Security.SecureString secret = new System.Security.SecureString();
    foreach (char c in pwd)

        secret.AppendChar(c);

    proc.StartInfo.Password = secret;
    proc.StartInfo.UseShellExecute = false;

    proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin ";

    proc.Start();
    while (!proc.HasExited)
    {
        proc.Refresh();
        // Thread.Sleep(1000);
    }

    proc.Close();
}
catch (Exception ex)
{
    throw ex;
}
0
ZokiManas

OMI, dans votre cas, vous pouvez essayer ceci:

  1. Mappez le dossier partagé sur un lecteur ou un dossier de votre ordinateur. ( Voici comment )
  2. Accédez au lecteur/dossier mappé comme vous le feriez normalement avec des fichiers locaux.

Rien ne doit être installé. Aucun service ne doit être en cours d'exécution, à l'exception de ceux qui permettent le partage de dossiers.

Si vous pouvez accéder au dossier partagé et le mapper sur votre ordinateur, la plupart des choses doivent fonctionner comme des fichiers locaux, y compris les invites de commande et tous les outils d'amélioration de l'Explorateur.

Cela diffère de l'utilisation de PsExec (ou de RDP-ing) dans la mesure où vous n'avez pas besoin de droits d'administrateur et/ou de droits de connexion aux services bureau/terminal distants sur le serveur distant, vous devez simplement pouvoir accéder à ces dossiers partagés.

Assurez-vous également que vous disposez de toutes les autorisations de sécurité nécessaires pour exécuter les commandes/outils que vous souhaitez exécuter sur ces dossiers partagés.


Si, comme vous le souhaitez, le traitement doit être effectué sur la machine cible, vous pouvez essayer PsExec , comme l'a souligné @divo et @recursive:

PsExec \\yourServerName -u yourUserName cmd.exe

Ce qui vous amène vous donne une commande Invite à la machine distante. Et à partir de là, vous pouvez exécuter ce que vous voulez.

Je ne suis pas sûr, mais je pense que vous avez besoin du service Serveur (lanmanserver) ou des services Terminal Server (TermService) (qui devrait déjà l'être).

0
chakrit