2

我在我的应用程序中托管 powershell 并设置了一个受限的运行空间池,它基本上是空的(据我所知)。

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”cmdlet。所以,我的问题是如何在没有“Import-Module”cmdlet 可用的情况下导入模块?

这是我收到的错误消息...

术语“Import-Module”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

4

1 回答 1

3

我找到了一个解决方案,不记得我现在在哪里做了,我实际上忘记了我问过这个问题!无论如何,这是为了任何有同样问题的人的利益。

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

当我问这个问题时,我实际上看不到我试图导入哪个模块,但我已经成功地使用了上面的代码来使用 AppFabric 管理 powershell cmdlet。

于 2012-08-02T22:16:28.733 回答