asp.net mvc アプリケーションでメンテナンス タスクとステータス タスクを実行するには、CLI が必要です。
powershell は CLI を提供するように設計されていると思います。しかし、名前以外は何も知りません。
カスタムタスク用の CLI を提供するために、iis で実行されている asp.net mvc で powershell をホストするにはどうすればよいですか?
asp.net mvc アプリケーションでメンテナンス タスクとステータス タスクを実行するには、CLI が必要です。
powershell は CLI を提供するように設計されていると思います。しかし、名前以外は何も知りません。
カスタムタスク用の CLI を提供するために、iis で実行されている asp.net mvc で powershell をホストするにはどうすればよいですか?
PowerShellエンジンをホストして使用するための.NETコードは非常に単純です。
private void ExecutePowerShellCommand(string command)
{
using (var invoker = new RunspaceInvoke())
{
Collection<PSObject> results = invoker.Invoke(command);
foreach (var result in results)
{
_listBox.Items.Add(result);
}
}
}
秘訣は、使用可能なコマンドを制限するようにPowerShell実行スペースを構成することです。おそらく、誰かが古いディレクトリからファイルを削除したり、コンピュータをシャットダウンしたり、ドライブをフォーマットしたりすることを許可したくないでしょう(彼らはパス内のEXEにアクセスできます)。制約付きランスペースを調べて、このメカニズムを介して実行できるものを制限します。使用できる言語機能を制限することもできます。
これまで PowerShell 内で CLI を実行したことはありませんが、.NET アプリケーション内で PowerShell の優れた機能を実行したことがあります。ここに役立つかもしれないものがあります。
この Channel9 エピソードには、.NET アプリケーションで PowerShell 2.0 コマンドを実行するための関連詳細が含まれています (1.0 よりもはるかに簡単です): http://channel9.msdn.com/posts/bruceky/How-to-Embedding-PowerShell-Within- aC-アプリケーション/
(このプロセスには、プロセスの標準入力および出力ストリームを操作しながらコマンドを呼び出すための使用は含まれていないSystem.Diagnostics.Process
ことに注意してください。その道をたどる試みはすべて、フラストレーションと失敗に見舞われました。)