PowerShell:Script2如何自动响应Script1的Read-Host输入请求?
问题分析与解决方案
错误原因
你的Script2是按顺序执行的:先运行./Script1.ps1,此时PowerShell会阻塞在Script1的Read-Host命令,等待用户手动输入。只有当你手动完成输入、Script1执行结束后,才会继续执行后面的SendKeys代码——这就是为什么SendKeys总是在手动输入后才触发的核心问题。
解决方案
方法1:管道传递输入(推荐,稳定可靠)
利用PowerShell的管道特性,直接给Script1的Read-Host传递输入内容,不需要模拟按键:
# 传递空字符串,等价于直接按回车 "" | ./Script1.ps1 # 如果需要输入指定内容(比如"myPassword"),改成: # "myPassword" | ./Script1.ps1
方法2:后台启动Script1+模拟按键
如果必须用SendKeys的方式,需要让Script1在后台独立进程运行,避免阻塞Script2的执行:
# 启动新的PowerShell进程运行Script1 Start-Process powershell.exe -ArgumentList "-File ./Script1.ps1" # 等待窗口初始化(时间可根据实际情况调整) Start-Sleep -Seconds 2 $wshell = New-Object -ComObject wscript.shell # 激活目标窗口(通过标题匹配) $wshell.AppActivate('bullshit') # 发送回车(或指定内容+回车) $wshell.SendKeys('{ENTER}') # 若要输入内容:$wshell.SendKeys('myPassword{ENTER}')
注意:方法2依赖窗口激活和延迟等待,稳定性不如方法1,如果窗口标题冲突、延迟时间不足,都可能导致失效。
内容的提问来源于stack exchange,提问作者Blu3Rat
相关产品推荐
相关产品推荐

