Получение вывода Powershell в C# после Конвейера. Вызовите броски

Если время, вовлеченное в реализацию схемы выделения разделов каталога, минимально, я выступаю за него. В первый раз необходимо отладить проблему, которая включает управление каталогом с 10000 файлами через консоль, которую Вы поймете.

Как пример, F-пятно хранит фото файлы как YYYY\MM\DD\filename.ext, что означает самый большой каталог, я должен был иметь дело с тем, вручную управление моим ~20000-фото набором является приблизительно 800 файлами. Это также делает файлы более легко доступными для просмотра из приложения сторонних производителей. Никогда не предполагайте, что Ваше программное обеспечение является единственной вещью, которая будет получать доступ к файлам Вашего программного обеспечения.

11
задан Nick A 7 August 2009 в 13:39
поделиться

2 ответа

Решение, которое я в итоге использовал, заключалось в реализации нашего собственного PSHost для обработки вывода PowerShell. Первоначальная информация для этого была получена из http://community.bartdesmet.net/blogs/bart/archive/2008/07/06/windows-powershell-through-ironruby-writing-a-custom-pshost.aspx в разделе «Создание пользовательского хоста PS».

В моем случае также требовалось использование пользовательского интерфейса PSHostRawUserInterface.

Вот краткий обзор того, что было сделано. Я перечислил только функцию, которую я фактически использовал, но многие из них просто содержат throw new NotImplementedException ();

private class myPSHost : PSHost
{
   (Same as what the above link mentions)
}
private class myPSHostUI : PSHostUserInterface
{
   private myPSHostRawUI rawui = new myPSHostRawUI();

   public override void Write // all variations
   public override PSHostRawUserInterface RawUI { get { return rawui; } }

}
private class myPSHostRawUI : PSHostRawUserInterface
{
   public override ConsoleColor ForegroundColor
   public override ConsoleColor BackgroundColor
   public override Size BufferSize
}
8
ответ дан 3 December 2019 в 03:19
поделиться

Не уверен, что это полезно. Я предполагаю, что вы используете V1. Этот подход V2 не выводит и не выводит результат:

Hello World
67 errors

string script = @"
  'Hello World'
  ps | % {
    $_.name | out-string1
  }
";

PowerShell powerShell = PowerShell.Create();

powerShell.AddScript(script);
var results = powerShell.Invoke();

foreach (var item in results)
{
  Console.WriteLine(item);
}

if (powerShell.Streams.Error.Count > 0)
{
  Console.WriteLine("{0} errors", powerShell.Streams.Error.Count);
}
16
ответ дан 3 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: