Pregunta

Algunos antecedentes:

En resumen, la orientación estándar de SharePoint es que los objetos COM respaldados como SPSite y SPWeb no deben ser utilizados por diferentes hilos. Esto está en conflicto con el uso de PowerShell de modo MTA por defecto, verificado en el puesto Soluciones provisionales de fugas que se hace referencia anteriormente. Una solución sugerida fue intentar bandera -sta de PowerShell 2.0, que parece que debería resolver el problema; Sin embargo, en los comentarios sobre su puesto Zach sugiere el modo STA no es suficiente.

Esto empuja al borde de mi conocimiento COM, así que espero que alguien pueda ayudar a entender ...

  1. En caso de que el modo de STA ser suficiente para mantener el acceso a objetos limitado a un solo hilo a través de tuberías PowerShell?
  2. Si no es así, ¿por qué?
¿Fue útil?

Solución

En última instancia, -sta modo debe ser suficiente siempre y cuando esté utilizando PowerShell 2.0. La razón de esto es que en el modo de STA, el espacio de ejecución por defecto vuelve a utilizar un solo hilo para todos los comandos interactivos (y secuencias de comandos también). Es posible que la versión de PowerShell que Zach estaba mirando en febrero se comportó de manera diferente que la corriente RC / RTM de PowerShell 2.0. Puede haber utilizado UseNewThread en lugar del predeterminado actual, ReUseThread:

PS> [System.Management.Automation.Runspaces.Runspace]::DefaultRunspace

Events                : System.Management.Automation.PSLocalEventManager
ThreadOptions         : ReuseThread
RunspaceConfiguration : System.Management.Automation.Runspaces.RunspaceConfigForSingleShell
InitialSessionState   :
Version               : 2.0
RunspaceStateInfo     : Opened
RunspaceAvailability  : Busy
ConnectionInfo        :
ApartmentState        : STA
InstanceId            : 8d3bfae1-8b64-433d-9ab9-ce640b15f84f
SessionStateProxy     : System.Management.Automation.Runspaces.SessionStateProxy
Debugger              : System.Management.Automation.Debugger

Así que en resumen, que estás bien aquí. La técnica avanzada que estaba hablando era más probable a hilar un nuevo espacio de ejecución utilizando ReUseThread que es redundante ahora ya que es la opción por defecto para -sta hilo. sin embargo, puede utilizar esta técnica para ejecutar en un único subproceso en modo MTA; -)

-Oisin

Microsoft PowerShell MVP

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top