1

これは、ネストされたモジュールをリストボックスにロードする方法です。

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'に一致するパラメータが見つかりません。

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////

4

2 に答える 2

0

何がlistBox1.SelectedItem含まれていますか?

名前だけの場合は、 ?MyModule1で見つかった名前です。$env:PSModulePath

モジュール検索パスにはないが、モジュール内の相対パスがロードされていると思われますMyModules。したがってImport-Module、完全なパス(または、現在のディレクトリを制御できる場合は相対パス)をモジュールのメインファイル(.psd1.psm1または.dll該当する場合)に渡す必要があります。

于 2012-05-09T13:15:28.910 に答える
0

ついに手に入れた:-

これを行う代わりに-

_ps.AddCommand(listBox1.SelectedItem.ToString()).Invoke();

これを行う -

_ps.AddScript(listBox1.SelectedItem.ToString()).Invoke();
于 2012-05-09T14:55:39.767 に答える