C#和Powershell共享内存

时间:2018-04-04 00:46:18

标签: c#

我有一个从C#程序执行的Powershell脚本。两者都使用带有静态内存的C#dll。执行Powershell脚本时,它可以访问C#程序设置的相同数据。此外,Powershell脚本写入dll的任何内容在下次调用脚本时都可用。

我希望它们完全分开,以便Powershell脚本在自己的环境和内存空间中运行。

这是我的代码:

using ( var _powerShell = PowerShell.Create() )
            {
                try
                {
                    _powerShell.Runspace = null;
                    _powerShell.RunspacePool = null;
                    _powerShell.AddScript($"{scriptFile} {args}");
                    _powerShell.Invoke();
                }
                catch ( Exception ex )
                {
                    Console.WriteLine(ex.ToString());
                }
                finally
                {
                    _powerShell.Dispose();
                }
            }

我猜我需要创建一个新的Powershell会话?我被卡住了。

1 个答案:

答案 0 :(得分:1)

感谢PetSerAI:

using ( _powerShell = PowerShell.Create() )
{
    try
    {
        var run = RunspaceFactory.CreateOutOfProcessRunspace(null);
        run.Open();
        _powerShell.Runspace = run;
        _powerShell.AddScript($"{scriptFile} {args}");
        _powerShell.Invoke();
    }
    catch ( Exception ex )
    {
        //do stuff
    }
}

更新: 所以上面的代码中有一个错误...... 新程序的运行空间直到程序结束才会释放。我多次调用此代码,这导致了一百个后台powershell实例。这是修复:

using ( var run = RunspaceFactory.CreateOutOfProcessRunspace(null) )
{
    run.Open();
    using ( _powerShell = PowerShell.Create() )
    {
        try
        {
            _powerShell.Runspace = run;
            _powerShell.AddScript($"{scriptFile} {args}");
            _powerShell.Invoke();
        }
        catch ( Exception ex )
        {
            //do stuff
        }
    }
}