在Web应用程序中托管powershell运行空间

Mis*_* N. 9 c# powershell powershell-2.0 runspace powershell-hosting

我正在编写一个执行powershell脚本的Web服务(活动目录,目录管理等).

现在,每个Web请求都会创建Runspace实例.由于Runspace初始化是一项耗时的操作,因此通常我必须导入像ActiveDirectory这样的模块,这些模块的运行速度也很慢.

在此博客文章" 使用C#管理Exchange 2007收件人"中,Runspace实例保留在静态字段中.

如果我将Runspace实例保存在静态字段中,我会徘徊,它是否是线程安全的?这样做可能有其他缺点吗?

谢谢

x0n*_*x0n 12

运行空间不是线程安全的,也不能保证它们运行的​​脚本也是如此.

我建议你创建一个RunspacePool并让你的web服务队列工作.这实际上很容易做到.我在v2 ctp3上发表过关于它的博客,但是RTM没有改变API.

http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

更新:

如果要使用一个或多个模块预加载池中的每个运行空间,请使用RunspaceFactory.CreateRunspacePool(InitialSessionState)重载.要了解如何创建和初始化它,请参阅:

http://www.nivot.org/2010/05/03/PowerShell20DeveloperEssentials1InitializingARunspaceWithAModule.aspx

每次创建PowerShell实例时,都将池分配给其RunspacePool属性.