2011-06-22 28 views
2

私はpowershellを使用してこの簡単なプログラムを持っています。これは単なる概念の証明です、私はより大きなアプリで同じコードを使用しています。問題は、以下のコードの一部のプロパティの値を読み取ることができないことです。 Valueプロパティを読み取ると、GetValueInvocationExceptionがスローされます。PowerShellオブジェクトのプロパティを列挙すると、

これは実際には、PowerShell SDKに付属のMicrosoftサンプルプロジェクトの1つでも発生します。なぜこれがあり、解決策はありますか?

static void Main(string[] args) 
    { 
     var powerShell = System.Management.Automation.PowerShell.Create(); 

     var runspace = RunspaceFactory.CreateRunspace(); 
     runspace.Open(); 
     Runspace.DefaultRunspace = runspace; 

     powerShell.Runspace = runspace; 
     powerShell.AddScript("Get-Process"); 
     var results = powerShell.Invoke(); 

     foreach (var prop in results.First().Properties) 
     { 
      try 
      { 
       Console.WriteLine(prop.Name + " : " + prop.Value); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(string.Format("Exception {0} on {1}", e.GetType(), prop.Name)); 
      } 
     } 

     Console.ReadKey(); 
    } 

答えて

2

これは、いずれかの設計で(結局、それはターゲットオブジェクトのプロパティのゲッターがスローされる)または発行(この効果は、PowerShellの意図的ではない場合)。どちらの場合も、今はこれについて多くを行うことはできません。つまり、このようなvcasesでtry/catchアプローチを使用する必要があります。あなたのC#コード(それはSystem.Diagnostics.Processで、結果オブジェクトのBaseObjectプロパティを経由してそれを得る)とプロパティを犯人アクセスでターゲットオブジェクトを取得してくださいhttps://connect.microsoft.com/PowerShell/Feedback

:私たちが持っている1つのオプションはに報告書を提出することです。それは、おそらく同様に、スローされます。

+0

あなたはおそらく正しいでしょう。私はそれらの特性を無視するべきです。私はこれを一般的に行っており、BaseObjectが何であるかをコードでは分かっていません。 PowerShell Job APIを使用していた前に(そして変更したい)。それで私はそのような問題はなかった。しかし、返されたプロパティを見ると、私の例で例外を投げるプロパティは、Jobアプローチを使用しているときに利用できないことがわかります。だから私はtry/catchが行く方法だと思います。ありがとう:) – LinusK

+0

はい、試して/キャッチ私のカスタムホストでは、未知のオブジェクト(読み込み、プロパティゲッターがスロー可能性がありますオブジェクト)を扱うときに何をしています。 –

関連する問題