PowerShell 绕过IE下载弹窗时代码仅触发Num Lock开启是什么原因?
PowerShell IE下载弹窗控制异常排查
核心问题原因
- 窗口标题匹配错误:你使用的
$wshell.appactivate("Save As")仅适配英文操作系统的IE环境,中文系统下另存为窗口标题为「另存为」,窗口激活失败后,SendKeys发送的指令会输入到当前激活的其他程序,进而误触发Num Lock开关等非预期操作。 - 缺少窗口等待逻辑:IE弹出下载窗口存在明显的响应延迟,代码执行
AppActivate时如果窗口还未完成加载,也会激活失败。 - 指令发送无间隔:连续发送按键指令时,系统未完成前一个指令响应就收到新指令,容易出现按键丢失、错位的问题。
修正后示例代码
$wshell = New-Object -ComObject WScript.Shell # 等待下载弹窗完全弹出,可根据实际设备性能调整时长 Start-Sleep -Seconds 3 # 英文系统替换双引号内内容为 "Save As" $wshell.AppActivate("另存为") Start-Sleep -Milliseconds 500 # 发送Alt+S快捷键触发保存 $wshell.SendKeys("%s") Start-Sleep -Milliseconds 500 $wshell.SendKeys("{ENTER}")
补充说明
如果执行过程中仍然存在Num Lock状态异常的问题,可以在脚本末尾增加强制复位Num Lock状态的代码:
# 按需设置为$true(开启)或$false(关闭) [System.Console]::NumberLock = $false
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

