Захватите консольные журналы сценария powershell, используя c# - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь выполнить сценарий powershell и записать форматированный вывод powershell в C# консольное окно, но всегда возвращает ноль.

C# Код:

    public List<SplunkEvent> events { get; set; } = new List<SplunkEvent>();

    public void InvokeCrawl()
    {
        try
        {
            List<UrlTracker> urls = new List<UrlTracker>();
            urls.Add(new UrlTracker() {  AirId = "4812", SiteId = "6976843556", Url = "https://test.com/homepage", RequestorEnterpriseId = "asif.iqbal.khan" });
            RunScript("4812", "asif", "iqbal", "pinku", "", urls);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    private void RunScript(string airID, string requestorEnterpriseId, string areaLeadEnterpriseId, string mDEnterpriseId, string serviceLeadEnterpriseId, List<UrlTracker> urls)
    {
        string _path = AppDomain.CurrentDomain.BaseDirectory + "Script\\Test.ps1";
        System.IO.StreamReader sr = new System.IO.StreamReader(_path);

        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();

        Pipeline pipeline = runspace.CreatePipeline();
        Command myCommand = new Command(_path);
        CommandParameter _airId = new CommandParameter("AirId", airID);
        myCommand.Parameters.Add(_airId);
        CommandParameter _url = new CommandParameter("SiteUrl", urls[0].Url);
        myCommand.Parameters.Add(_url);

        pipeline.Commands.Add(myCommand);
        //pipeline.Commands.AddScript(sr.ReadToEnd());
        pipeline.Commands.Add("Out-String");
        var results = pipeline.Invoke();
        runspace.Close();
        StringBuilder stringBuilder = new StringBuilder();
        foreach (PSObject obj in results)
        {
            stringBuilder.AppendLine(obj.ToString());
        }

        Console.WriteLine(stringBuilder.ToString());
    }

Test. ps1 код:

enter image description here

Вывод из C#: enter image description here

Выполнение сценария непосредственно внутри windows PowerShell Я мог видеть результат печати. enter image description here

1 Ответ

1 голос
/ 25 марта 2020

В вашем скрипте Powershell используйте Write-Output вместо Write-Host

. Вы также можете удалить эту строку из кода C#.

pipeline.Commands.Add("Out-String");

Подробнее о разнице между этими двумя здесь: Разница в PowerShell между Write-Host и Write-Output?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...