这就是我在 ListBox 中加载嵌套模块的方式。
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”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
我假设模块现在已经加载到内存中,我只需要调用它。(注意这里的模块名和命令名是一样的)
///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// /////////////
更新: 也试过这个,即从路径显式加载模块->>没有运气-
var path = ((PSModuleInfo) (((PSObject) (listBox1.SelectedItem)).ImmediateBaseObject)).Path;
path=path.Replace("system32", "SysWOW64");
_ps.AddCommand("Import-Module");
_ps.AddParameter(path);
_ps.Invoke();
更新后的异常: [虽然模块存在,但在 ISE x86 shell 中运行良好]
找不到与参数名称“C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules\MyModules\MyModule1\MyModule1.psm1”匹配的参数。
///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// /////////////