PowerShell をホストする作業をいくつか行い、多くの資料を読みましたが、奇妙な動作が見られ、自分が思っていたようにホストを理解していないのではないかと思います。
RunspaceFactory で実行空間を作成しています:
var runSpace = RunspaceFactory.CreateRunspace()
ホストの実行中に同じ実行空間を利用しています。ホストを初めて起動するときに、Import-Module コマンドを呼び出します。
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Import-Module");
psCommand.Parameters.Add("Name", directory + "MyModule");
pipeline.Commands.Add(psCommand);
pipeline.Invoke();
「ディレクトリ」は、デフォルトのモジュール ディレクトリではないディレクトリです。PowerShell コマンド ウィンドウでまったく同じ構文で同じ import-module コマンドを使用でき、正常に動作します。カスタム ホスト内でコマンドが正常に完了したように見えます。実行の後半で、モジュール内でコマンドレットを呼び出そうとします。
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Get-Stuff");
pipeline.Commands.Add(psCommand);
var stuff = pipeline.Invoke();
しかし、呼び出し時に、「Get-Stuff」がコマンドレットではないという例外が発生します..など。
私の理解では、実行空間はこのタイプの状態を維持します。そうではありませんか?別のプロジェクト内でホストを正常に作成しました。2 つの主な違いは、そのホストが既定のモジュール ディレクトリ (Documents\Modules\) を利用していることと、次のように CreateRunspace() メソッドを呼び出していることです。
var runspace = Runspace.CreateRunspace(customHost);
状態を維持できるようにするには、PSHost を定義する必要がありますか?