2017-02-21 11 views
1

c#webformsアプリケーション内で、Hyper-Vサーバー上のVMの現在割り当てられているメモリ合計を返そうとしています。私はpowershellコマンドを書いており、Hyper-Vサーバーにリモート接続してスクリプトブロックを実行する実績のある方法を持っています。スクリプトを文字列として追加し、ps.addscript(scriptString)を使用してパイプラインに挿入します。私はこれを行う方法上の任意のアイデアを出力PowershellコマンドからC#変数への結果

コマンドが正常に動作し、エラーがアプリケーションに存在しないが、私はC#の変数に結果の値を返す方法がわからない(好ましくはint型)

?ランスペースを使用していないが、私はする必要があるかどうかわからない。私はパイプラインを呼び出して、出力値をC#変数に追加したいだけです。スクリプトで

(私はこの記事の目的のために「1.1.1.1」でIPアドレスを交換した)

string breakLine = System.Environment.NewLine; 

string getHyp1Use = "$hypUN = \"DOMAIN\\" + boxUN.Text + "\"" + breakLine + 
    " $hypPWD =ConvertTo-SecureString \"" + boxPWD.Text + "\" -AsPlainText -Force" + breakLine + 
    " $hypCREDS = New-Object System.Management.Automation.PSCredential($hypUN, $hypPWD)" + breakLine + 
    " set-item wsman:\\localhost\\Client\\TrustedHosts -value 1.1.1.1 -force" + breakLine + 
    " $builderSession = New-PSSession -ComputerName 1.1.1.1 -Credential $hypCREDS" + breakLine + 
    " Invoke-Command -Session $builderSession -ScriptBlock {Get-VM | Where { $_.State –eq ‘Running’ } | measure MemoryAssigned -Sum | select -ExpandProperty Sum}" + breakLine + 
    " Invoke-Command -ScriptBlock {Remove-PsSession -Session $builderSession}"; 

       string hyp1Use = null; 
       PowerShell ps = PowerShell.Create(); 
       ps.AddScript(getHyp1Use); 
       var results = ps.Invoke(); 

答えて

1

results変数はPSObjectのコレクションです。

あなたはそれを反復し、PowerShellの結果の「列/プロパティ」のそれぞれの値を取得...のようなものができます。

var results = ps.Invoke(); 
foreach (var psobject in results) 
{ 
    var myInteger = Convert.ToInt32(psobject.Members["SomeField"].Value); 
    // do something with `myInteger` 
} 

PSObjectのフィールドは、返されたオブジェクトの種類によって異なりますPowershellによって

1

DLRから "ダイナミック"を試してみてください。作業がはるかに簡単になります。

static void Main(string[] args) 
     { 
      var script = "Get-Process | select -Property @{N='Name';E={$_.Name}},@{N='CPU';E={$_.CPU}}"; 

      var powerShell = PowerShell.Create().AddScript(script); 

      foreach (dynamic item in powerShell.Invoke().ToList()) 
      { 
       //check if the CPU usage is greater than 10 
       if (item.CPU > 10) 
       { 
        Console.WriteLine("The process greater than 10 CPU counts is : " + item.Name); 
       } 
      } 

      Console.Read(); 
     } 

リンク:calling-c-code-in-powershell-and-vice-versa

関連する問題