0

で(また)動作するように設計されたいくつかのオブジェクトを書いていますPowerShellPowerShellコンソールに非同期で直接書き込む可能性が欲しいです。ここまでで、次のことを行いました。

  • WriteLine などのいくつかのメソッドを公開する IUtilityHost インターフェイスを作成しました
  • PSUtilityHost にインターフェイスを実装しました: PSHost オブジェクトをラップする IUtilityHost クラス
  • PSHost.UI オブジェクトで WriteLine メソッドを呼び出す WriteLine メソッドが実装されています。

Read-Host問題は、手動入力が必要なときに実行をブロックするために時々必要なメッセージが混在する奇妙な出力があることです。

PowerShell ホストにメッセージを非同期的に送信するためのより良い方法があるかどうかを知りたいです。

ありがとう

4

1 に答える 1

0

C# から Host オブジェクトを取得し、その Write* メソッドを使用してこれを実行してみてください。

public class Poco
{
    private PSHostUserInterface _ui;

    public Poco()
    {
        var runspace = Runspace.DefaultRunspace;
        Pipeline pipeline = runspace.CreateNestedPipeline("Get-Variable host -ValueOnly", false);
        Collection<PSObject> results = pipeline.Invoke();
        if (results.Count > 0)
        {
            var host = results[0].BaseObject as PSHost;
            if (host != null)
            {
                _ui = host.UI;
            }
        }            
    }

    public void WriteLine(string msg)
    {
        _ui.WriteLine(msg);
    }
}

注: PowerShell プロンプトに対してこれを行うために Console.WriteLine を使用することもできますが、コンソール アプリではない ISE などの他の PowerShell ホストでは役に立ちません。

于 2012-12-10T22:18:31.357 に答える