アプリケーションにかなり制限された PowerShell サポートを追加しようとしています。ユーザー定義の PowerShell スクリプトを定期的に実行して出力を表示し、(最終的には) 進行状況の通知とユーザー プロンプトの要求を処理できるようにしたいと考えています。私がホストするシェル内からユーザースクリプトがそれ自体を実行しない限り、コマンドラインスタイルのインタラクティブなサポート、または(私が思うに)リモートアクセスまたは複数の同時スクリプトを実行する機能は必要ありません。最終的には、スクリプトを非同期またはバックグラウンド スレッドで実行し、シェルにいくつかの初期変数とコマンドレットをシードする可能性がありますが、それはこの機能が得られる可能性が高いのと同じくらい「派手」です。
ホスト アプリケーション コードの記述に関する MSDNのドキュメントを読んでいますが、オブジェクト、、、、、、またはを作成する方法は喜んで説明されていますが、これらのアプローチのいずれかを選択する理由については示されていません。PowerShell
Runspace
RunspacePool
Pipeline
私はこれら 2 つのうちの 1 つにかかっていると思いますが、どちらのアプローチを取るのが良いかについてのフィードバックが欲しいです:
PowerShell shell = PowerShell.Create();
shell.AddCommand(/* set initial state here? */);
shell.AddStatement();
shell.AddScript(myScript);
shell.Invoke(/* can set host! */);
また:
Runspace runspace = RunspaceFactory.CreateRunspace(/* can set host and initial state! */);
PowerShell shell = PowerShell.Create();
shell.Runspace = runspace;
shell.AddScript(myScript);
shell.Invoke(/* can set host here, too! */);
(必須のPSHost
派生クラス メソッドの 1 つは ですEnterNestedPrompt()
。私が実行するユーザー定義スクリプトによってそれが呼び出される可能性があるかどうかはわかりません。可能であれば、「新しいネストされたメソッドを開始する責任があります。入力ループ」(ここのように)...それが上記のパスに影響する場合は、それも知っておくとよいでしょう。)
ありがとう!