IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

[développement] Comment lancer des commandes dos à distance ? [Débutant]


Sujet :

Développement Windows

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut [développement] Comment lancer des commandes dos à distance ?
    Bonjour à tous !

    Je cherche a accéder aux processus d'un logiciel (Obiee) qui tourne sur un serveur distant. (inutile de préciser que j'ai tous les droits)
    Je développe en C#.
    Ma première idée fut de recourir à la classe Process. Je l'ai abandonnée. En effet, dans le gestionnaire des tâches certains processus ont le même nom et peuvent être dupliqué plusieurs fois par certains services.
    J'ai toutefois une commande dos qui me permet d'obtenir les informations que je cherche.
    Mon problème est donc le suivant : Comment mon programme en c# va-t-il lancer une commande dos sur le serveur distant ?

    A l'aide !

    Merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Eurêka !
    La classe Process était bien mon amie finalement. Je m'en sers pour lancer cmd puis je passe mes arguments via ProcessStartInfo. (y'a plus qu'à tester)

    Toutes mes excuses pour ce flood.

    Bien à vous,

    Tarmineldur

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il y a plusieurs façons de faire.

    Personnellement, je te conseille d'utiliser WMI. Tu trouveras du code en exemple sur ce lien : Create a Remote Process using WMI in C#
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Merci de ta réponse.
    J'ai lu ton lien avec attention et si j'ai bien compris (enfin je crois) comment créer un fichier batch, j'ai beaucoup plus de mal à comprendre comment extraire des informations via ce moyen.
    Quant à ma solution via la classe Process, j'ai le même problème : je vois bien comment entrer des lignes de commandes mais je ne sais pas comment récupérer les informations qui s'affichent alors dans la console.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Je ne sais pas comment faire ça avec Process.

    Cet article montre comment faire pour récupérer le code de sortie via WMI : http://blogs.msdn.com/b/padmanr/arch...using-wmi.aspx

    Est-ce que ça répond à ton besoin ?

    [EDIT] : il n'est à ma connaissance pas possible de récupérer au fur et à mesure ce qui s'affiche sur la console en tant que tel.

    La seule chose qui soit possible de faire est de récupérer l'affichage de l'ordinateur distant, pour l'afficher sur l'ordinateur local (sous forme d'images en gros).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,
    Citation Envoyé par Matt07 Voir le message
    [EDIT] : il n'est à ma connaissance pas possible de récupérer au fur et à mesure ce qui s'affiche sur la console en tant que tel.
    Si si, c'est possible dans le cas de l'utilisation de la classe Process. Il faut lire le flux, ou le rediriger dès la création
    Par contre, utiliser Process pour lancer un processus sur un autre ordinateur, alors là je ne sais pas du tous.

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par antoine.debyser Voir le message
    Si si, c'est possible dans le cas de l'utilisation de la classe Process. Il faut lire le flux, ou le rediriger dès la création
    Ah oui bien vu Je n'avais pas connaissance de ces propriétés. Merci pour cette correction.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Après mure réflexion, je ne comprends pas comment marche le WMI... Je ne comprends rien aux chemins d'accès par exemple. Dans mon cas, la machine est sur le réseau local, quel en est alors le chemin ? Quelle syntaxe dois-je utiliser ?

    Pour ce qui est de streamreader, je connaissais mais je n'y avais pas pensé, bien vu. Voilà qui finit de répondre à mon problème relatif à l'obtention des statuts. Reste l’arrêt relance.

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    object[] theProcessToRun = { "notepad.exe" };
    ConnectionOptions theConnection = new ConnectionOptions();
    theConnection.Username = "username";
    theConnection.Password = "password";
    ManagementScope theScope = new ManagementScope("\\\\" + IP_or_ServeRName + "\\root\\cimv2", theConnection);
    ManagementClass theMngClass = new ManagementClass(theScope,  new ManagementPath("Win32_Process"), new ObjectGetOptions());
    theMngClass.InvokeMethod("Create", theProcessToRun);
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup, là c'est beaucoup plus clair. Je vous tiens au courant.

    Je regrette juste que cette solution nécessite une connexion, j'aurais bien aimé rester en .net et éviter cela. Non, non, ça va en fait. Ayant déjà les droits, je n'ai pas besoin de mettre user et password \o/

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Comment se fait il que si je démarre cmd.exe par exemple, je n'ai pas la fenetre ? comment l'avoir ?

  12. #12
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ceci fonctionne bien chez moi :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    object[] theProcessToRun = { @"notepad.exe /A C:\Temp\AssemblyRegistration.xml" };
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Merci !
    Désolé de poser une question aussi triviale mais c'est assez du de trouver de la bonne doc sur le sujet. C'est plus facile sur d'autres langages.

  14. #14
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est sûr que ce n'est pas toujours évident, mais WMI est très puissant, donc ça vaut le coup de s'y intéresser et de persévérer.

    Concernant ta question sur CMD, chez moi avec cette commande :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    object[] theProcessToRun = { @"cmd.exe" };

    Et avec ceci (pour lancer l'instruction WMI en local) :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    ManagementScope theScope = new ManagementScope("\\\\127.0.0.1\\root\\cimv2", theConnection);

    J'ai bien la console qui s'affiche...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    De mon côté, que ce noit notepad ou cmd, ça s'affiche bien dans la liste des processus (donc ça marche) mais je n'ai pas la fenêtre. Il doit exister une option... quelque part...

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Hum... lorsque je le fait sur mon pc (via 127.0.0.1) ça s'affiche bien en fenêtre, mais lorsque que je le fait sur mon server (qui tourne joyeusement sur windows server) ça ne s'affiche plus. Là, ça ne sent pas bon...

  17. #17
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est normal que tu n'aies pas la fenêtre lorsque tu envoies la commande à ton serveur. L'important c'est que le process se lance, en principe tu n'es pas censée être logguée sur ton serveur H24
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  18. #18
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Je vais donc lancer via wmi un .bat qui exécutera environ 7 lignes de codes qui me donnerons les statuts de certains processus très particulier.
    Pour récupérer ces statuts qui s’afficheront dans la console invisible, je pense utiliser la classe process et récupérer cmd.exe via GetProcessesByName et rediriger la sortie de cmd.exe grace à Streamreader.

    Je me pose donc deux questions :
    Peut on vraiment rediriger l'output de cmd.exe s'il est sur une machine distante ?
    Et surtout :
    Je risque d'avoir un problème si plusieurs cmd.exe sont en train de tourner pour savoir lequel est le bon. Il faudrait donc que je connaisse son ID au démarrage sachant que c'est le .bat qui le lance... Une idée ?
    Je vais être obligé de devoir me passer de .bat non ? il me semble qu'on peut connaitre l'ID du processus quand on le lance via wmi...
    Du coup, ce n'est pas un mais 7 arguments que je vais devoir donner à cmd en le lançant avec wmi, comment fait on ?

    Soyez assurés que je cherche de mon côté
    Merci de votre aide

  19. #19
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    A mon avis, il faut que tu choisisses clairement ton camp :
    - soit tu restes en pur .NET avec la class Process
    - soit tu restes sur WMI

    Avec WMI, tu peux récupérer les informations sur les processus en utilisant ce genre de code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string query = "Select * From Win32_Process Where Name = 'notepad.exe'";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    ManagementObjectCollection processList = searcher.Get();
     
    foreach (var obj in processList)
    {
        string cmdLine = obj.GetPropertyValue("CommandLine").ToString();
        string handle = obj.GetPropertyValue("Handle").ToString();
    }
    Dans l'exemple ci-dessus, je récupère les informations pour les processus ayant pour nom "notepad.exe". Pour info, j'ai auparavant lancé un processus visant notepad.exe (tu peux te servir du code posté ici précédemment).

    Dans la variable cmdLine, il je récupère la commande qui a servi a lancer le processus (donc avec les paramètres s'il y en a).
    Dans la variable handle, je récupère l'ID du process.

    Une série d'articles à voir sur CodeProject :
    Working With Windows Management Instrumentation (WMI) - Part 1
    Working With Windows Management Instrumentation (WMI) - Part 2
    Working With Windows Management Instrumentation (WMI) - Part 3
    Working With Windows Management Instrumentation (WMI) - Part 4
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup de ta réponse. Il semblerait effectivement que la voix mixte ne mène nulle part. Quant à la classe Process, elle semble un peu faible.
    Vive WMI !
    Je m'en vais donc chercher dans cette voix.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2012, 12h56
  2. [Débutant] Lancer des commandes DOS et fichiers.m
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 3
    Dernier message: 24/02/2010, 15h07
  3. Réponses: 2
    Dernier message: 06/03/2009, 12h05
  4. [Free Pascal] Comment passer des commande en mode MS-DOS
    Par JoseF dans le forum Free Pascal
    Réponses: 7
    Dernier message: 13/03/2007, 20h37
  5. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo