开发者

Hosting powershell runspace in web application

I'm writing a web service that executes powershell scripts (active directory, directory management, etc).

Right now, Runspace instance is created per web request. As Runspace initialization is time consuming operation, plu开发者_运维知识库s often I have to import modules, like ActiveDirectory, which are also slow operations.

In this blog post Managing Exchange 2007 Recipients with C# , the Runspace instance is kept in a static field.

I wander what if I keep Runspace instance in static field, would it be thread safe? Maybe there are other drawbacks of doing it this way?

Thanks


Runspaces are not thread-safe, nor can they guarantee that the scripts they are running are either.

I would suggest you create a RunspacePool and have your web service queue work to it. This is actually pretty easy to do. I blogged about it for v2 ctp3, but the API has not changed for RTM.

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

update:

If you want to preload each runspace in the pool with one or more modules, use the RunspaceFactory.CreateRunspacePool(InitialSessionState) overload. To see how to create and initialize this, see:

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

Every time you create a PowerShell instance, assign the pool to its RunspacePool property.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜