Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 31
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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#

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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).

  6. #6
    Membre éprouvé
    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 : 401
    Points
    401

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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 Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 806
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 806
    Points : 6 696
    Points
    6 696

    Par défaut

    Code :
    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    Par défaut

    Ceci fonctionne bien chez moi :

    Code C# :
    object[] theProcessToRun = { @"notepad.exe /A C:\Temp\AssemblyRegistration.xml" };

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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# :
    object[] theProcessToRun = { @"cmd.exe" };

    Et avec ceci (pour lancer l'instruction WMI en local) :
    Code C# :
    ManagementScope theScope = new ManagementScope("\\\\127.0.0.1\\root\\cimv2", theConnection);

    J'ai bien la console qui s'affiche...

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    février 2010
    Messages
    2 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 2 220
    Points : 5 513
    Points
    5 513

    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# :
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2012
    Messages : 72
    Points : 19
    Points
    19

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •