我有一个从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会话?我被卡住了。
答案 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
}
}
}