2015-06-22 2 views
2

Я пытаюсь выполнить следующую Powershell команду внутри C#Запуск PowerShell с C#

Powershell:

"Get-ADDomainController -Filter * | Select-Object Name,OperatingSystem,OperatingSystemServicePack,Site | Format-List" 

Вот мой C# Код:

using (PowerShell inst = PowerShell.Create()) 
     { 
      inst.AddCommand("Import-Module").AddParameter("Name", "ActiveDirectory"); 
      inst.AddScript(command); 
      inst.Commands.AddCommand("Out-String"); 
      foreach (PSObject result in inst.Invoke()) 
      { 
       Console.WriteLine("'{0}'", result); 
      } 

      Console.ReadLine(); 
     } 

Это прекрасно работает и печатает но я хочу, чтобы это можно было перебирать через информацию

Так, например, результаты напечатаны выглядеть следующим образом

Имя: ххх OperatingSystem: Windows Server 2008 OperatingSystemServicePack: Service Pack 2 Сайт: ххх

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

Надежда, что имеет смысл

+0

Возможно, вам сначала нужно избавиться от 'Out-String' от вашего кода на C#? Это превращает все в строки. – Vesper

+0

Я использовал внешнюю строку, чтобы убедиться, что получаю результаты, для целей тестирования –

ответ

1

Ok Так вот исправление я хотел, думал, я хотел бы поделиться в случае это помогает кто-то другой

первое, что я сделал было избавились от команды Format-List в PowerShell, то я мог бы итерацию по результатам со следующими C# код и поместить его в список

List<DomainControllerLists> dcList = new List<DomainControllerLists>(); 
     using (PowerShell inst = PowerShell.Create()) 
     { 
      inst.AddCommand("Import-Module").AddParameter("Name", "ActiveDirectory"); 
      inst.AddScript(command); 
      Collection<PSObject> results = inst.Invoke(); 
      foreach (PSObject obj in results) 
      { 
       dcList.Add(new DomainControllerLists() { Name = obj.Members["Name"].Value.ToString(), OperatingSystem = obj.Members["OperatingSystem"].Value.ToString(), OperatingSystemServicePack = obj.Members["OperatingSystemServicePack"].Value.ToString(), Site = obj.Members["Site"].Value.ToString() }); 
      } 
     } 
     return dcList; 

это теперь возвращает список с информацией, мне нужно Вы могли бы очень это вверх путем преобразования цикла Еогеаспа в LINQ заявление

Смежные вопросы