2

私はアプリ内でPowerShellをホストしており、制限付きのrunspacepoolを設定しました。これは基本的に空です(私の知る限り)。

public class MyPowerShell : IDisposable
{
    private RunspacePool _runspacePool;
    private PowerShell _shell;

    public MyPowerShell()
    {
        try
        {
            var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer);

            _runspacePool = RunspaceFactory.CreateRunspacePool(initialSessionState);

            _shell = PowerShell.Create();
            _shell.RunspacePool = _runspacePool;
            _shell.RunspacePool.Open();

            _shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly());
            _shell.Invoke();
            _shell.Commands.Clear();
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    public void Dispose()
    {
        _shell.RunspacePool.Close();
        _shell.Dispose();
    }

    public string[] Exec(string commandText)
    {
        var results = new List<string>();

        try
        {
            _shell.AddScript(commandText);
            foreach (var str in _shell.AddCommand("Out-String").Invoke<string>())
            {
                results.Add(str);
            }
        }
        catch (Exception ex)
        {
            results.Add(ex.Message);
        }
        return results.ToArray();
    }

}

明らかに、私がこのコードを実行すると...

        _shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly());
        _shell.Invoke();
        _shell.Commands.Clear();

使用可能な「Import-Module」コマンドレットがないため、失敗します。だから、私の質問は、「Import-Module」コマンドレットを使用せずにモジュールをインポートするにはどうすればよいですか?

これは私が受け取っているエラーメッセージです...

「Import-Module」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認して、再試行してください。

4

1 に答える 1

3

私は解決策を見つけました、私が今どこでしたか思い出せません、そして私は実際に私がこの質問をしたことを忘れていました!とにかく、ここでそれは同じ問題を抱えている人の利益のためです。

var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer);
initialSessionState.ImportPSModule(new [] { "ModuleName1", "ModuleName2" });

この質問をしたときに、インポートしようとしたモジュールを実際に確認することはできませんが、AppFabric管理のPowerShellコマンドレットを使用するために上記のコードを正常に使用できました。

于 2012-08-02T22:16:28.733 に答える