[英]Scheduled Powershell task can't interact with browser
修改后的描述:
使用下面的建议,我使用了我可以创建的最基本的代码。 请注意,我在下面的“启动过程”中使用Powershell社区扩展。 我不知道这是否会影响事情。
我有以下功能
function Populate-Notepad
{
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
Start-Process Notepad
[Microsoft.VisualBasic.Interaction]::AppActivate("Untitled")
[System.Windows.Forms.SendKeys]::SendWait("blahblahblah")
return
}
可以很好地进行交互。
我有一个名为Parse的函数,该函数查询POP帐户,如果找到消息,请采取措施。 因此,所考虑的操作是(定义了$ helptext并且它可以正常工作-正确地对此进行了解析。)
Switch ($cmd)
{
"HELP" {$text = $helptext}
"NOTE" {populate-notepad}
default {$msg = $msg + "Invalid command: $command `n"}
}
这不火的记事本。 如果我看着任务管理器,它似乎永远不会出现。 我的猜测是,如果可以解决-以下问题也可以解决。
我有一个Powershell脚本,可以调用Firefox并在Firefox上触发一堆SendKey(这是一个很长的故事,但是尝试使用Web调用是有问题的。)它可以很好地交互工作,但是当计划任务运行了一个调用上述脚本的Powershell脚本时Powershell脚本...
Firefox运行...但是它不是交互式的(因此,powershell正在运行,脚本正在启动。)换句话说,我从没有看到Firefox窗口。 我不确定这是否重要,但是在任务管理器窗口中始终存在firefox.exe。 但是,我的脚本总是挂起,抱怨找不到Firefox窗口。
就像我说的,这是互动的。 它通过任务管理器使用与常规交互式脚本相同的凭据(此框上只有1个用户(管理员除外)); 它没有被隐藏,我尝试将其作为“以最高特权运行”而无济于事。
有什么想法吗?
我在尝试执行相同的操作时遇到了一些问题, Powershell脚本在另一个会话/上下文中运行(正如我在此处阅读的那样, 操纵桌面元素的Powershell脚本不适用于Scheduler )。
因此,您不能使用gui。
我的解决方案是使用此
(new-object -com wscript.shell).run("http://localhost/",3)
这将打开一个全屏的本地网站,并专注于默认的Web浏览器。 之后,您可以使用sendkeys。
附带说明一下,如果我要使用AppActivate,我将通过捕获并使用ID来确保它确实是我刚刚开始的过程。
$iex = Start-Process 'C:\Program Files (x86)\Internet Explorer\iexplore.exe' -passthru 'http://localhost/'
start-sleep 3
[Microsoft.VisualBasic.Interaction]::AppActivate($iex.Id)
但是,这不能解决问题,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.