9

PowerShellスクリプト(Active Directory、ディレクトリ管理など)を実行するWebサービスを作成しています。

現在、RunspaceインスタンスはWebリクエストごとに作成されます。Runspaceの初期化は時間のかかる操作であるため、さらに、ActiveDirectoryなどのモジュールをインポートする必要があります。これも遅い操作です。

このブログ投稿「C#を使用したExchange 2007受信者の管理」では、Runspaceインスタンスは静的フィールドに保持されています。

Runspaceインスタンスを静的フィールドに保持すると、スレッドセーフになりますか?たぶん、この方法でそれを行うことの他の欠点がありますか?

ありがとう

4

1 に答える 1

12

実行スペースはスレッドセーフではなく、実行中のスクリプトがスレッドセーフであることを保証することもできません。

RunspacePoolを作成し、Webサービスキューを機能させることをお勧めします。これは実際には非常に簡単です。v2 ctp3についてブログを書きましたが、RTMのAPIは変更されていません。

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

アップデート:

プール内の各ランスペースに1つ以上のモジュールをプリロードする場合は、RunspaceFactory.CreateRunspacePool(InitialSessionState)オーバーロードを使用します。これを作成して初期化する方法については、以下を参照してください。

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

PowerShellインスタンスを作成するたびに、プールをそのRunspacePoolプロパティに割り当てます。

于 2011-02-11T15:28:07.583 に答える