Domanda

Alcuni retroscena:

In breve, la guida SharePoint standard è che gli oggetti COM-backed come SPSite e SPWeb non dovrebbero essere utilizzati da diversi thread. Ciò è in contrasto con l'utilizzo di PowerShell modalità MTA di default, verificato nel post di perdite Soluzioni alternative di cui sopra. Una soluzione suggerita è stato quello di provare PowerShell 2.0 di bandiera -sta, che sembra che dovrebbe risolvere il problema; tuttavia, nei commenti sul suo post Zach suggerisce modalità STA non è sufficiente.

Questo spinge al bordo della mia conoscenza COM, quindi spero che qualcuno possa aiutarmi a capire ...

  1. Dovrebbe modalità STA essere sufficiente a mantenere l'accesso all'oggetto limitato a un singolo filo attraverso condutture PowerShell?
  2. Se no, perché?
È stato utile?

Soluzione

In definitiva, la modalità -sta dovrebbe essere sufficiente a condizione che si sta utilizzando PowerShell 2.0. La ragione di questo è che in modalità STA, la spazio di esecuzione predefinito riutilizza un solo filo per tutti i comandi interattivi (e script troppo). E 'possibile che la versione di PowerShell che Zach stava guardando nel mese di febbraio si è comportato in modo diverso che l'attuale RC / RTM di PowerShell 2.0. Potrebbe essere utilizzato UseNewThread al posto del predefinito corrente, 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

Così, in breve, sei ok qui. La tecnica avanzata di cui stava parlando era più probabile come far girare un nuovo spazio di esecuzione utilizzando ReUseThread che è superfluo ora dal momento che è l'opzione predefinita per filo -sta. Si potrebbe tuttavia utilizzare questa tecnica per l'esecuzione su un singolo thread in modalità MTA; -)

-Oisin

Microsoft PowerShell MVP

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top