これは、ネストされたモジュールをリストボックスにロードする方法です。
public partial class Form1 : Form
{
readonly PowerShell _ps = PowerShell.Create();
public Form1()
{
InitializeComponent();
_ps.AddScript("Import-Module MyModules");
_ps.AddScript("(Get-Module MyModules).NestedModules");
Collection<PSObject> psObjects = _ps.Invoke();
foreach (var psObject in psObjects)
{
listBox1.Items.Add(psObject);
}
}
ここで、ユーザーが特定のモジュールを選択した場合、同じものを実行したいと思います。
これは機能していないようです[モジュールをロードし、コマンドを認識する必要があります]-
_ps.AddCommand(listBox1.SelectedItem.ToString()).Invoke();
例外:
「MyModule1」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認して、再試行してください。
モジュールはこれまでにメモリにロードされていると思いますが、それを呼び出すだけです。(ここでは、モジュール名とコマンド名は同じであることに注意してください)
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////
更新: これも試してみました。つまり、パスからモジュールを明示的にロードします->>運がありません-
var path = ((PSModuleInfo) (((PSObject) (listBox1.SelectedItem)).ImmediateBaseObject)).Path;
path=path.Replace("system32", "SysWOW64");
_ps.AddCommand("Import-Module");
_ps.AddParameter(path);
_ps.Invoke();
更新後の例外: [モジュールは存在しますが、ISEx86シェルでは完全に正常に動作します]
パラメータ名'C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ MyModules \ MyModule1\MyModule1.psm1'に一致するパラメータが見つかりません。
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////