计划的 Powershell 任务无法与浏览器交互



修订描述:

根据下面的建议,我使用了我能创建的最基本的代码。请注意,我使用的是带有下面"启动进程"的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上触发一堆SendKeys(这是一个很长的故事,但尝试使用web调用是有问题的。。。

Firefox正在运行。。。但它不是交互式的(所以powershell正在运行,脚本正在启动。)换句话说,我从来没有看到Firefox窗口。我不确定这是否重要,但在我的任务管理器窗口中总是有一个firefox.exe。然而,我的剧本总是挂着,抱怨找不到萤火虫窗口。

正如我所说,这是交互工作的;它通过任务管理器使用与常规交互脚本相同的凭据(此框中只有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 Exploreriexplore.exe' -passthru 'http://localhost/'
    start-sleep 3
    [Microsoft.VisualBasic.Interaction]::AppActivate($iex.Id)

然而,这并不能解决问题,

最新更新