Если время, вовлеченное в реализацию схемы выделения разделов каталога, минимально, я выступаю за него. В первый раз необходимо отладить проблему, которая включает управление каталогом с 10000 файлами через консоль, которую Вы поймете.
Как пример, F-пятно хранит фото файлы как YYYY\MM\DD\filename.ext, что означает самый большой каталог, я должен был иметь дело с тем, вручную управление моим ~20000-фото набором является приблизительно 800 файлами. Это также делает файлы более легко доступными для просмотра из приложения сторонних производителей. Никогда не предполагайте, что Ваше программное обеспечение является единственной вещью, которая будет получать доступ к файлам Вашего программного обеспечения.
Решение, которое я в итоге использовал, заключалось в реализации нашего собственного 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
}
Не уверен, что это полезно. Я предполагаю, что вы используете 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);
}