You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript SendKeys在管理员模式PowerShell中失效问题求助

嘿,这个问题我之前也碰到过,核心是Windows的UAC权限隔离在搞鬼!让我给你理清楚原因和解决办法:

问题根源
  • Windows的UAC(用户账户控制)会给进程划分不同的完整性级别:普通进程属于「中级别」,管理员进程属于「高级别」。
  • 你的VBS脚本默认是普通权限运行的(低级别),而通过runas启动的PowerShell是管理员权限(高级别)。出于安全限制,低级别进程没法向高级别进程发送键盘输入,这就是SendKeys没反应的原因。
解决办法

关键是让发送按键的VBS脚本也以管理员权限运行,这样两个进程处于同一权限级别,就能正常交互了。

方案1:合并脚本,一键搞定

把启动PowerShell和发送按键的逻辑放到同一个脚本里,先让脚本以管理员身份重启自身,再执行后续操作:

' 检查当前脚本是否拥有管理员权限
Set shellApp = CreateObject("Shell.Application")
Set wshShell = CreateObject("WScript.Shell")
scriptPath = WScript.ScriptFullName

' 如果不是管理员,就以管理员身份重新运行脚本
If Not shellApp.IsUserAnAdmin Then
    shellApp.ShellExecute "wscript.exe", Chr(34) & scriptPath & Chr(34), "", "runas", 1
    WScript.Quit
End If

' 现在脚本是管理员权限,启动管理员PowerShell
wshShell.Run "powershell -executionpolicy bypass", 1, False
WScript.Sleep 2000

' 发送按键,此时能正常生效
wshShell.SendKeys "hello"

方案2:保留分开脚本,统一权限启动

如果你还是想把逻辑拆成两个文件,那得确保两个脚本都以管理员权限运行:

  1. 先写好启动PowerShell的脚本(比如Start-AdminPS.vbs)和发送按键的脚本(比如Send-Keys.vbs)
  2. 创建一个「启动器」脚本,以管理员身份依次调用这两个脚本:
Set shellApp = CreateObject("Shell.Application")
' 启动管理员PowerShell
shellApp.ShellExecute "wscript.exe", "C:\路径\Start-AdminPS.vbs", "", "runas", 1
WScript.Sleep 2500
' 以管理员身份运行发送按键的脚本
shellApp.ShellExecute "wscript.exe", "C:\路径\Send-Keys.vbs", "", "runas", 1

另外,在Send-Keys.vbs里用AppActivate时,要确认你获取的是管理员PowerShell的PID(普通和管理员PowerShell是完全独立的进程)。

补充说明
  • 普通权限下正常的原因很简单:普通VBS和普通PowerShell处于同一完整性级别,系统允许它们之间的输入交互。
  • 别想着绕过这个UAC限制,这是Windows的安全设计,强行突破可能带来不必要的风险。

内容的提问来源于stack exchange,提问作者user2755941

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:45:47