2013-08-16 2 views
0

powershell 스크립트를 실행하는 응용 프로그램이 있으며 powershell 스크립트가 반환하는 데이터를 저장해야합니다.동적으로 생성 된 데이터 저장 + C# + powershell

응용 프로그램에 전달 될 수있는 스크립트의 예는 다음과 같습니다

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

나는 다음을 필터링 : 여기

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

결과를 스크립트를 실행 및 저장에 대한 내 C# 코드입니다 반환 된 컬렉션의 멤버가 내가 찾는 사람을 찾으려면

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

목표가 아무 것도 하드 코딩하지 않는 것입니다, 그래서 동적으로 테이블이나 뭔가를 만들 필요가 내 반환 memberinfo (어떤 수의 속성이 될 수 있습니다) 그리고 나는 그 memberinfo 속성의 반환 값을 얻으려면 그 다음 필요합니다 SQL 테이블에 적절한 형식으로 저장하십시오.

PowerShell 출력물에 뭔가 빠졌는가, 아니면 출력 형식을 지정하는 프레임 워크가있어서 사용하기가 더 쉽습니까?

항목 및 속성 이름 이외의 다른 데이터는 어떻게 저장합니까?

나는 SQL 테이블에 데이터를 저장하고 거기에서 어떤 종류의보기로로드 생각하고 있어요.

모든 속성에 대해 작동하는 솔루션을 찾으려고합니다. 모든 도움을 주시면 대단히 감사하겠습니다.

+0

PSMemberInfo에는 이름, 값 등의 속성이있어이를 저장할 테이블을 만들 수 있습니다. 따라서 여러 개의 속성을 이름 값 쌍으로 저장할 수 있습니다. 너가 원하는게 그거야? – Mitul

+0

네,하지만 어떤 속성을 사용해야할지 모르겠습니다. 것은 - 사용자가 스크립트를 만들 것입니다 - 결국에는 모두 "select-object-property"를 갖지만 사용자가 속성과 응용 프로그램을 선택하도록 만들 필요가 있습니다. 따라서 어떤 memberinfo 찾을 수 있습니다. 난 그냥 어떻게 모르겠어요 – VisualBean

+0

거기 powershell 출력을 통해 반복하는 방법이 있습니까? 그것은 psobject의 foreach 항목이 아닙니다 ... .value - 어떻게 그것을 memberinfo에 연결합니까 – VisualBean

답변

1

이와 같은 사전 개체를 사용하거나 사용자 지정 클래스를 만들고 각 PSMemberInfo 개체를 목록에 저장하십시오. 따라서 귀하의 표는 이름, 가치 물건 및 기타 메타 데이터 일 수 있습니다. 우리의 다른 scriptText에 주석을 달아보십시오. 그리고 다른 속성을 가지고 있지만 여전히 사전 객체는 모든 속성을 가져옵니다. 데모 목적으로 결과 집합에서 하나의 객체 만 사용하고 있습니다.
업데이트 : 스크립트에는 첫 번째 항목이 없지만 반환되는 개체 유형을 얻으려면 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

관련 문제