2013-04-17 11 views
6

Ich habe in den letzten paar Monaten in Powershell (2.0) getüftelt und würde es gerne verwenden, um einige der Prozesse bei der Arbeit zu modernisieren und zu standardisieren - hauptsächlich DOS-basierte Prozesse. Aufgrund der Art der Arbeit könnte es etwa 100 Ausführungen desselben Skripts gleichzeitig geben.Wird Powershell -sta bevorzugt?

Erste - Ist Powershell "sicher" auf diese Weise zu verwenden? Ich habe -STA als eine Ausführungsoption gesehen - ist das die bevorzugte Methode, mit Powershell zu arbeiten, wenn man eine gute Anzahl desselben Skripts gleichzeitig ausführt, oder ist das etwas, das nur benutzt wird, wenn es absolut notwendig ist? In meiner Suche habe ich nicht wirklich eine Antwort für "Wann sollte ich Appartment-Status verwenden?" I glaube, meisten, wenn nicht alle der Skripts, die ich vorhabe, wird nicht eingefädelt werden.

Vielen Dank im Voraus für alle, die Licht auf Powershell Apartment State!

+1

am besten, wie ich sagen kann, -STA muss in Powershell-Code verwendet werden, die GUI/Forms oder beim Zugriff auf IE, aber darüber hinaus, ist es nützlich? – Barb

Antwort

9

In PSv2 wird der Konsolenhost als MTA ausgeführt und die ISE wird als STA ausgeführt. In PSv3 die Konsole defaults to STA.

können Sie sehen, was Ihre Wohnung Zustand mit diesem ist:

[System.Threading.Thread]::CurrentThread.GetApartmentState() 

Die einzige Zeit, die Sie brauchen STA zu verwenden, wenn bestimmte Klassen in .NET, die mit COM-Objekten befassen, die es verwenden, z.B. System.Windows.Forms.Clipboard.

Es gibt zwei Möglichkeiten, die ich kenne, zu STA zu ändern:

powershell.exe -Sta -File MyScript.ps1 

Oder

$ps = [PowerShell]::Create() 
$rs = [RunSpaceFactory]::CreateRunspace() 
$rs.ApartmentState = "STA" 
$rs.ThreadOptions = "ReuseThread" 
$rs.Open() 
$ps.Runspace = $rs 
$ps.AddScript({ ([System.Threading.Thread]::CurrentThread.GetApartmentState()) }).Invoke() 

Also wirklich die Frage ist, warum ist die pSV2 Konsole MTA statt STA? Wenn ich wissen will, warum das PS-Team solche Entscheidungen getroffen hat, verweise ich gewöhnlich auf das Buch PowerShell in Action von Bruce Payette. Leider hat es nicht warum gesagt. Es sagte nur, dass es einige COM-Objekte gibt, die STA erfordern, und wenn Ihr Skript nicht funktioniert, versuchen Sie, es als STA erneut auszuführen.

+0

"Die einzige Zeit, die Sie STA verwenden müssen, ist, wenn Sie bestimmte Klassen in .NET verwenden, die mit COM-Objekten arbeiten, die sie verwenden" - ich denke, das ist die Antwort, die ich letztendlich suchte. Vielen Dank. – Barb

Verwandte Themen