2013-08-16 3 views
0

У меня есть приложение, которое запускает скрипт powershell, и мне нужно сохранить данные, возвращаемые скриптом powershell.сохранение динамически созданных данных + C# + powershell

Пример сценария, который может быть передан в приложение является:

Get-NetAdapter | Select-Object -Property name, status 

Вот мой C# код для запуска сценария и сохранения результатов:

PowerShell powershell = PowerShell.Create(); 
powershell.Runspace = RunspaceFactory.CreateRunspace(); 
powershell.Runspace.Open(); 
powershell.AddScript(scriptText); 
var results = powershell.Invoke(); 

Я отфильтруйте члены возвращенной коллекции, чтобы найти те, которые я действительно ищу

var firstobject = results[0].Members; 
foreach(PSMemberInfo memberInfo in firstobject) 
{   
    if (!listOfStrings.Contains(memberInfo.Name)) 
    { 
     //Do something with this -- stuck 
    } 
} 

Цель это не жесткий код, поэтому мне нужно динамически создавать таблицу или что-то еще, что может содержать мой возвращаемый memberinfo (который может быть любым числом свойств) , и тогда мне нужно, чтобы получить возвращаемые значения указанных свойств memberinfo И THEN сохраните его в таблице SQL в соответствующем формате.

Я что-то пропустил в выводе powershell или есть фреймворк для форматирования вывода, поэтому его проще в использовании?

Как сохранить данные, о которых я ничего не знаю, кроме количества элементов и имени свойств?

Я собираюсь сохранить данные в таблице SQL и оттуда загружать их в какой-то вид.

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

+0

У PSMemberInfo есть такие свойства, как Name, Value, для которых вы можете создать таблицу для их хранения. Таким образом, вы можете сохранить любое количество свойств в качестве пар значений имени. Это то, что вы хотите? – Mitul

+0

Да, но я не знаю, какие свойства будут использоваться. Дело в том, что пользователь будет создавать скрипты - все они будут иметь «select-object -property» в конце, но мне нужно создать его, чтобы пользователь выбирал свойства, а приложение сортирует вывод в таблицы из любого членаinfoinfo он может найти. Я просто не знаю, как – VisualBean

+0

Есть ли способ итерации через вывод powershell? Это не элемент foreach в psobject ... .value - и как мне связать его с memberinfo – VisualBean

ответ

1

Попробуйте использовать объект Dictionary, подобный этому, или создайте собственный класс и сохраните каждый объект PSMemberInfo в списке. Таким образом, ваша таблица может иметь только имя, значение и другие метаданные. Попробуйте прокомментировать наш другой скриптText, и он имеет другое свойство, и объект словаря получает все свойства. Для демонстрационных целей я использую только один объект из набора результатов.
Обновление: в скрипте нет ни одного, а только для того, чтобы получить возвращаемый объект. Я делаю powershell.Invoke().First().Members.

static void Main(string[] args) 
    { 
     //var scriptText = "Get-Process | Select *"; 
     //var scriptText = "Get-Service"; 
     var scriptText = "Get-Service | Select ServiceName, Status"; 
     PowerShell powershell = PowerShell.Create(); 
     powershell.Runspace = RunspaceFactory.CreateRunspace(); 
     powershell.Runspace.Open(); 
     powershell.AddScript(scriptText); 

     Dictionary<string, object> dictprop = new Dictionary<string, object>(); 

     foreach (PSMemberInfo item in powershell.Invoke().First().Members) 
     { 
      try 
      { 
       dictprop.Add(item.Name, item.Value); 
       Console.WriteLine("Name = {0}, Value = {1}", item.Name, item.Value); 
      } 
      catch (Exception ex) 
      { 
       //Null Value invocation exception. 
      } 

     } 

     Console.Read(); 
    } 
+0

очень приятно! но что мне делать, когда я не использую -Первый? - без использования foreach в скрипте? – VisualBean

+0

Итак, вы хотите сохранить свойства только типа возвращаемого объекта независимо от количества возвращаемых объектов? – Mitul

+0

проверить обновленный ответ без первого в scriptText. – Mitul

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