In PSv2, the console host runs as MTA, and the ISE runs as STA. In PSv3 the console defaults to STA.
You can see what your apartment state is with this:
[System.Threading.Thread]::CurrentThread.GetApartmentState()
The only time you need to use STA is when using certain classes in .NET that deal with COM objects that use it e.g. System.Windows.Forms.Clipboard
.
There are two ways I know of to change to STA:
powershell.exe -Sta -File MyScript.ps1
Or
$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()
So the question really is why is the PSv2 console MTA instead of STA? When I want to know why the PS team made decisions like this I usually refer to Bruce Payette's PowerShell in Action book. Unfortunately it didn't say why. It just said there are some COM objects that require STA and if your script doesn't work try re-running it as STA.