1

C# アプリケーションを介して PS1 ファイルを実行し、重大度に基づいて出力をキャプチャ/セグメント化しようとしています。エラー、デバッグ、情報など。これは Windows フォーム アプリケーションです。ボタンのクリックで呼び出す Run メソッドは次のとおりです。

PowerShell m_PSInst = PowerShell.Create();

//Add the script to execute
m_PSInst.AddScript(fileName);

//Attach to the Info Stream
m_PSInst.Streams.Information.DataAdded += (sender, args) =>
{
      var psData = (PSDataCollection<InformationRecord>)sender;

      var results = psData.ReadAll();

      foreach (var result in results)
      {
          AddInfo(result.ToString());
      }
};

//Run Async
Task.Factory.FromAsync(m_PSInst.BeginInvoke(), pResult => m_PSInst.EndInvoke(pResult));

AddInfo メソッド内で、UI レイヤーへのスレッド アクセスをチェックしています。

public void AddInfo(string value)
{
    if (InvokeRequired)
    {
        Invoke(new Action<string>(AddInfo), value);
        return;
    }

    infoTextbox.AppendText(value, Color.White);
    allOutputTextbox.AppendText(value, Color.White);

    Application.DoEvents();
}

私のPS1ファイルの内容は次のとおりです。

Write-Information "Test-Before"
Get-WebBinding
Write-Information "Test-After"

私が見ているのは「Test-Before」であり、それだけです。すべての出力ストリームは、Get-WebBinding コマンドの後、何も受信していないようです。Out-Default、Out-String、さらには Out-File を追加してみました。何も機能していないようです。

ここに描かれていないのは、Error、Debug、Verbose、Progress、および Warning を含む他のストリームの DataAdded メソッドです。これで自分を蹴るのをやめたいです。:)

4

1 に答える 1