gpt4 book ai didi

powershell - 关于ISE与带有SystemEvents的控制台的问题

转载 作者:行者123 更新时间:2023-12-02 23:35:47 32 4
gpt4 key购买 nike

当我在PowerShell ISE中运行以下命令时,它可以完美运行,并为我提供了“AccountLock”或“AccountUnlock”的原因。但是,当我在提升的Powershell控制台中运行此确切命令时,它根本不会在控制台中返回sessionswitch原因。解锁后不返回任何内容。

我检查了Get-EventSubscriberGet-Job,两者看起来都已成功创建。
订阅者和作业的屏幕截图:

get-job and get-EventSuscriber calls

Register-ObjectEvent -InputObject $([microsoft.win32.systemevents]) -EventName "SessionSwitch" -Action {write-host $event.SourceEventArgs.Reason}

我想做的一件事是让Windows检测何时解锁 session (在用户将其密码与域同步后)并打开一个程序。

作业系统:Windows 10
版本:5.1 Build 17134 R 590

最佳答案

在四处查看后,我找不到使用[windows.win32.systemevents]的好方法,因此我联系了Lee Holmes。他说这是因为Powershell控制台主机默认在单线程单元(STA)模型中运行。如果您在MTA中运行它,则可以正常工作。

最简单的解决方法是在脚本的开头使用类似于此代码的代码,以确保您处于MTA模式,如果不启动新的Powershell进程,则重新启动该脚本。

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

关于powershell - 关于ISE与带有SystemEvents的控制台的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55679774/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com