Hébergement PowerShell Runspace dans l'application Web
-
12-11-2019 - |
Question
J'écris un service Web qui exécute PowerShell Scripts (Active Directory, Directory Management, etc.).
À l'heure actuelle, Runspace L'instance est créée par demande Web. Comme l'initialisation de RunSpace prend du temps, plus je dois souvent importer des modules, comme ActivIrectory, qui sont également des opérations lentes.
Dans cet article de blog Gestion des destinataires d'échange 2007 avec C # , l'instance Runspace est conservée dans un champ statique.
Je erre si je continue à installer une instance Runspace dans un champ statique, serait-ce sûr le fil? Peut-être y a-t-il d'autres inconvénients de le faire de cette façon?
Merci
La solution
Les espaces run ne sont pas en filetage, et ils ne peuvent pas garantir que les scripts qu'ils exécutent sont non plus.
Je vous suggère de créer un runspacepool et de faire travailler votre file d'attente de service Web. C'est en fait assez facile à faire. J'ai blogué à ce sujet pour V2 CTP3, mais l'API n'a pas changé pour RTM.
http://www.nivot.org/2009/01/22/ctp3TherunspacefactoryandPowershellaccelerators.aspx
mettre à jour:
Si vous souhaitez précharger chaque runspace dans la piscine avec un ou plusieurs modules, utilisez la surcharge RunSpaceFactory.CreaterunSpacePool (initialSessionState). Pour voir comment créer et initialiser, voir:
http://www.nivot.org/2010/05/03/powershell20developessentials1Initializingarunspacewithamodule.aspx
Chaque fois que vous créez une instance PowerShell, affectez le pool à sa propriété RunSpacePool.