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

C# Discussion :

Récupérer la valeur d'une variable powershell dans un programme C#


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Récupérer la valeur d'une variable powershell dans un programme C#
    Bonjour à tous,

    Tout d'abords je m'excuse si j'ai créé un doublon mais j'en doute.

    Comme le dit le sujet, je souhaite récupérer la valeur d'une variable de mon script PowerShell pour l'exploiter avec mon programme en C#.

    Actuellement le programme C# exécute le script avec des paramètres et ce en boucle dans un foreach pour chaque éléments renvoyés par une requête SQL.
    A la fin le script affiche la valeur de sa variable $ExitCode (qui d'ailleurs est récupérée dans un fichier.log).

    J'ai besoin de cette valeur pour la suite de mon programme C#.

    Si il y a un moyen de la récupérer, si vous avez une solution ou même une idée, je suis preneur

    Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    try
                {
                    SQL = new clsSQL("SVIR-SQL08\\DEV02", "TestAD", false, "TestAD", "TestAD");
                    Console.WriteLine("Connexion OK");
                    List<TestWinForm.clsUser> Liste = new List<TestWinForm.clsUser>();
                    Liste = TestWinForm.clsUser.ListeUseID(SQL);
     
                    foreach (TestWinForm.clsUser c in Liste)
                    {
                        System.Diagnostics.Process.Start("powershell.exe", "powershell -executionpolicy Bypass -file C:\\Maxime\\ADCA.ps1 /SIMUL /CODEIT=" + c.Agence.CodeIT + " /USER=" + c.Login + ";" + c.Nom + ";" + c.Prenom + ";" + c.TEL + ";" + c.Mail + ";").WaitForExit();
     
                        string[] lines = { "###############",c.Nom, c.Prenom, c.Agence.CodeIT, c.Agence.NomAgence };
                        System.IO.File.AppendAllLines(@"C:\Maxime\LOG\UserList.txt", lines);
                        Console.WriteLine("-----------------");
                        Console.WriteLine(c.AGEID);
                        Console.WriteLine(c.TEL);
                        Console.WriteLine(c.Mail);
                        Console.WriteLine(c.Nom);
                        Console.WriteLine(c.Prenom);
                        Console.WriteLine(c.Login);
                        Console.WriteLine(c.Agence.CodeIT);
                        Console.WriteLine(c.Agence.NomAgence);
                        Console.WriteLine(c.DateEffet);
                        Console.WriteLine(c.BatchDate);
                        Console.WriteLine(DateTime.Now.ToShortDateString());
                        Console.WriteLine("-----------------");
                    }
                    Console.ReadKey();
                }
    PS : Si vous connaissez la balise exacte pour mettre du code proprement dans ce post merci de me conseiller un édit !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Pas concluant
    C'est pas trop mal, mais ce n'est pas encore ça :

    " Erreur
    Object reference not set to an instance of an object "
    J'ai ajouté ceci dans le foreach d'origine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                        string ExitCode = "ExitCode";
     
                        Runspace runspace = RunspaceFactory.CreateRunspace();
                        runspace.Open();
     
                        var out_var = runspace.SessionStateProxy.PSVariable.GetValue(ExitCode);
                        Console.WriteLine("Variable ${0} value is: ", ExitCode);
                        Console.WriteLine(out_var.ToString());
    Dois-je rajouter les 3 lignes faisant appel à la pipeline ? Je n'est jamais utilisé ça..

  3. #3
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    L'erreur obtenue t'indique que tu essayes d'utiliser un objet sans l'avoir instancié.

    Debug ligne par ligne jusqu'à arriver à l'erreur et tu sauras quel objet c'est.

    Edit : lorsque tu crées une discussion ou répond ou edit, peu importe, au dessus de la zone de texte il y a des boutons, celui pour la balise de code est le #

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Je ne trouve pas
    J'ai rajouté les pipelines :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.AddScript("powershell -executionpolicy Bypass -file C:\\Maxime\\ADCA.ps1");
    Collection<PSObject> results = pipeline.Invoke();
    Mais j'ai toujours le même message d'erreur

    Je crois que mon soucis est que je lance mon script avec cette commande qui est loin d'être souple et modifiable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Process.Start("powershell.exe", "powershell -executionpolicy Bypass -file C:\\Maxime\\ADCA.ps1 /SIMUL /CODEIT=" + c.Agence.CodeIT + " /USER=" + c.Login + ";" + c.Nom + ";" + c.Prenom + ";" + c.TEL + ";" + c.Mail + ";").WaitForExit();
    Édit : Le débug ligne par ligne m'est malheureusement impossible car je créer/modifie le programme en local sur ma machine puis le génère avant de l'exécuter sur un serveur distant pour le tester...

  5. #5
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Tu devrais avoir un projet pour tester tes bouts de code en séparé avant de les intégrer.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Résolut
    Bon alors j'ai enfin ma variable dans mon programme C# grâce au code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                        string ExitCode = "ExitCode";
     
                        Runspace runspace = RunspaceFactory.CreateRunspace();
                        runspace.Open();
                        System.Diagnostics.Process.Start("powershell.exe", "powershell -executionpolicy Bypass -file C:\\Maxime\\ADCA.ps1 /SIMUL /CODEIT=" + c.Agence.CodeIT + " /USER=" + c.Login + ";" + c.Nom + ";" + c.Prenom + ";" + c.TEL + ";" + c.Mail + ";").WaitForExit();
                        Pipeline pipeline = runspace.CreatePipeline("powershell -executionpolicy Bypass -file C:\\Maxime\\ADCA.ps1");
                        //pipeline.Commands.AddScript();
                        Collection<PSObject> results = pipeline.Invoke();
                        var out_var = runspace.SessionStateProxy.PSVariable.GetValue(ExitCode);
                        Console.WriteLine("Variable ${0} value is: ", ExitCode);
                        Console.WriteLine(Convert.ToInt32(out_var));
    Je précise que ma variable est de type INT, ça compte pour la dernière ligne

    À voir demain si j'arrive à en faire quelque chose de bien dans le programme...

    Merci beaucoup !

  7. #7
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    De rien!

    Le forum pour les questions très compliquées et technique c'est le top, mais pour un petit soucis comme celui là, le chat c'est bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2011, 14h41
  2. Réponses: 1
    Dernier message: 12/04/2009, 17h54
  3. [Spip] Récupérer la valeur d'une variable PHP dans une boucle Spip
    Par papisdoums dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/04/2009, 19h03
  4. [PHP 5.0] Récupérer la valeur d'une variable php dans du code javascript
    Par HF974 dans le forum Langage
    Réponses: 4
    Dernier message: 08/03/2009, 11h46
  5. Réponses: 2
    Dernier message: 03/12/2008, 17h34

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