2016-06-15 15 views
4

C#初心者のプロパティを介して、ネストされたPowerShellのオブジェクトの値を取得します。私がしようとしているものが可能かどうかは分かりません。 基本的に、私はC#で PowerShellのオブジェクト内のシステムオブジェクト配列のプロパティを読み取るしようとしています。ここでC位

簡単にするため、ここでは同様の出力あり、基本的なPowerShellのコードです:物事のC#の側で

$object = New-Object -TypeName PSObject 
$object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Yad" 
$object | Add-Member -MemberType NoteProperty -Name "Title" -Value "C# Noob" 
$object | Add-Member -MemberType NotePropety -Name "Machine Services" -Value (Get-Service) 

return $object 

が、私は以下のようにプロパティをマッピングすることにより、結果をフェッチすることができる午前:

これにより
var shell = PowerShell.Create(); 
shell.Commands.AddScript("C:\\Scripts\\Powershell\\TestScript.ps1 -user " + userName); 

Collection<PSObject> results = shell.Invoke(); 

Profile userProfile = new Profile(); //Profile class is declared prior this line 


foreach (PSObject psObject in results) 
     { 
      userProfile.Name = Convert.ToString(psObject.Properties["Name"].Value); 
      userProfile.Title= Convert.ToString(psObject.Properties["Title"].Value); 
      userProfile.MachineServices= psObject.Properties["Machine Services"].Value; 
     } 

、「USERPROFILE」オブジェクトは、PowerShellの出力に相当します。

は今、「MachineServices」プロパティは、プロパティの独自のセット(ステータス、名前、およびPowerShellでのDisplayName)を含むオブジェクトです。これらのプロパティを呼び出して値を取得することは可能ですか?

私は、PowerShellスクリプトが完全に独立しており、プロパティはC#のコード前ランタイムに不明であるとして当然のことながら、私はエラーを取得し、以下のようなものを試してみましたけど。

userProfile.MachineServices.Status 

任意のアイデア?

答えて

1

.GetType()を使用してGet-Serviceを調べると、メンバーがServiceControllerObjectの配列が返されることがわかります。

私はC#で、それを試していないが、あなたはSystem.ServiceProcess.ServiceController[]としてProfile.MachineServicesを宣言して、C#は、正しいオブジェクトの種類を知ったら、あなたはプロパティとメソッドにアクセスすることができます割り当て

userProfile.MachineServices= (System.ServiceProcess.ServiceController[])(psObject.Properties["Machine Services"].Value); 

を使用することができるはずです、 IntelliSenseなどを取得します。

+0

あなたトニに感謝。これを少し遅らせて、すでにその日のために詰め込んだ。私は明日最初にこれを試し、それがどうなるかを教えてくれるでしょう。 – Yad