Powershell事件处理程序上下文

Powershell事件处理程序上下文,powershell,events,event-handling,Powershell,Events,Event Handling,我尝试使用next命令订阅SessionSwitch事件: Register-ObjectEvent -InputObject ([Microsoft.Win32.SystemEvents]) -EventName 'SessionSwitch' -Action { Write-Host "Session Changed" } 它适用于Windows 7、Windows Server 2008 R2和Windows Server 2012 R2上的Powershell ISE。 我锁定和解锁会

我尝试使用next命令订阅SessionSwitch事件:

Register-ObjectEvent -InputObject ([Microsoft.Win32.SystemEvents])
-EventName 'SessionSwitch' -Action { Write-Host "Session Changed" }
它适用于Windows 7、Windows Server 2008 R2和Windows Server 2012 R2上的Powershell ISE。 我锁定和解锁会话,并在shell中显示“会话已更改”消息。 但若我在WindowsServer2012 R2上的“通用”Powershell外壳中运行命令,那个么它就不起作用了。 看来我错过了一些重要的事情。请告诉我我错过了什么


“Common”-powershell.exe、powershell ISE-powershell_ISE.exe似乎与中的问题相同:

解决方案是将console作为MTA而不是STA运行:

if ([System.Threading.Thread]::CurrentThread.ApartmentState -ne [System.Threading.ApartmentState]::MTA)
{
    powershell.exe -MTA -File $MyInvocation.MyCommand.Path
    return
}

有关更多详细信息,请参阅答案:

我可以确认,这在我的Server 2012 R2机器上的PowerShell控制台中不起作用。ISE没有问题。