web-dev-qa-db-fra.com

Exécuter des scripts Powershell en c #

Vous trouverez ci-dessous le script que j'utilise pour essayer d'exécuter mon script PowerShell, mais chaque fois que je l'exécute, une fenêtre de commande vide s'affiche.

Code C #

static void Main(string[] args)
{
    string text = System.IO.File.ReadAllText(@"C:\Program Files (x86)\Backup Reporter\Required\edit_website.ps1");

    using (PowerShell PowerShellInstance = PowerShell.Create())
    {
        // use "AddScript" to add the contents of a script file to the end of the execution pipeline.
        // use "AddCommand" to add individual commands/cmdlets to the end of the execution pipeline.
        PowerShellInstance.AddScript(text);

        Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
        foreach (PSObject outputItem in PSOutput)
        {
            // if null object was dumped to the pipeline during the script then a null
            // object may be present here. check for null to prevent potential NRE.
            if (outputItem != null)
            {
                Console.WriteLine(outputItem.BaseObject.ToString() + "\n");
            }
        }
        if (PowerShellInstance.Streams.Error.Count > 0)
        {
            Console.Write("Error");
        }
        Console.ReadKey();
    }
}

Script Powershell

 $text = "test test test"

Tout ce que je veux faire, c'est envoyer le test à la fenêtre de commande.

3
user5863575

Vous pouvez utiliser Write-Output au lieu de Write-Host. Cela fonctionne pour moi tout en appelant à partir de l'application Winform. 

1
kpundir

Votre code semble être correct, cependant votre script ne donne aucune sortie. C'est pourquoi vous ne voyez pas la sortie du script. Ajouter:

Write-Host $text

Cela vous donnera une sortie imprimée à la ligne:

Console.WriteLine(outputItem.BaseObject.ToString() + "\n");
0
Peter

Votre script ne donne aucune sortie.Vous pouvez utiliser la commande write-output de votre script pour obtenir une sortie. [As kpundir refer]

Write-Output $text
0
Dev4All