Как получить результаты скрипта Poweshell обратно в объекты C #? - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу выполнить скрипт PowerShell через C #.Мой скрипт создаст файл .csv в указанном месте.Приведенный ниже код создает файл в указанном месте, но я хочу, чтобы код возвращал объект, который имеет все содержимое / данные, которые есть в файле.Это возможно?

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
{
    runspace.Open();
    RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);

    Pipeline pipeline = runspace.CreatePipeline();
    Command scriptCommand = new Command(@"C:\powershell.ps1");

    Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();

    pipeline.Commands.Add(scriptCommand);

    Collection<PSObject> psObjects;
    psObjects = pipeline.Invoke();
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы можете вернуть содержимое файла из powershell с помощью этой команды и затем записать вывод powershell в PSDataCollection.

  private async Task<IEnumerable<string>> Process(string command)
    {
        var output = new List<string>();

        using (var powerShell = System.Management.Automation.PowerShell.Create())
        {
            powerShell.AddScript(command);

            var outputCollection = new PSDataCollection<PSObject>();

            await Task.Factory.FromAsync(
                powerShell.BeginInvoke<PSObject, PSObject>(null, outputCollection),
                result =>
                {
                    OnDeployEnd?.Invoke(this, EventArgs.Empty);
                    foreach (var data in outputCollection)
                    {
                        output.Add(data.ToString());
                    }
                }
            );

            if (powerShell.HadErrors)
            {
                var errorsReport = powerShell.Streams.Error.GetErrorsReport();
                throw new Exception(errorsReport);
            }
        }

        return output;
    }
0 голосов
/ 26 ноября 2018

Можете ли вы использовать Powershell API?

Например:

PowerShell psinstance = PowerShell.Create();
psinstance.AddScript(scriptPath);
var results = psinstance.Invoke();

Более подробную информацию можно найти здесь: https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/

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