双PC直播场景PowerShell通过PSSession运行SendKeys无响应求助
问题根因排查与解决方案
核心根因
通过PSSession建立的远程PowerShell会话默认运行在Session 0系统服务上下文,没有关联当前登录用户的交互式桌面环境,而SendKeys依赖活动桌面会话才能将按键事件发送到目标应用窗口,所以即使脚本执行成功也不会产生任何可见效果。
可落地排查步骤
- 第一步:确认远程执行上下文绑定到活动用户会话
你需要将脚本运行在当前登录直播PC的用户的交互式会话中,可通过query user命令先查询当前登录用户的会话ID,再通过调用计划任务或者psexec指定会话ID执行脚本,示例psexec命令如下:psexec.exe -i <你的会话ID> -s powershell.exe -Command "$wshell = New-Object -ComObject wscript.shell; Start-Sleep -Milliseconds 200; $wshell.SendKeys(']')" - 第二步:修正SendKeys调用逻辑
原脚本没有预留窗口聚焦的缓冲时间,容易出现按键发送时窗口还未完成聚焦的问题,可增加短延迟提升成功率:$wshell = New-Object -ComObject wscript.shell # 预留200ms缓冲时间确保目标窗口处于激活状态 Start-Sleep -Milliseconds 200 $wshell.SendKeys(']') - 第三步:验证按键发送逻辑
先在直播PC本地运行修改后的脚本,确认可以正常向聚焦的文本文件输入]后,再通过远程调用的方式执行,排除本地脚本本身的问题。
更稳定的替代方案
SendKeys受窗口聚焦、弹窗干扰的影响非常大,针对你控制OBS的需求,更推荐使用OBS WebSocket插件实现跨PC控制:
- 在直播PC的OBS中安装OBS WebSocket插件,设置访问密码
- 在游戏PC的Stream Deck中配置OBS WebSocket控制插件,直接调用OBS的原生功能接口,不需要依赖热键和窗口聚焦,稳定性远高于SendKeys方案。
内容的提问来源于stack exchange,提问作者Caleb Taylor Bloo1147
相关产品推荐
相关产品推荐

