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

时间:2013-06-21 20:25:38

标签: powershell scheduled-tasks scheduler interactive

修订说明:

使用下面的建议,我使用了我可以创建的最基本的代码。请注意,我正在使用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调用是有问题的。)它可以很好地交互工作,但是当一个计划任务运行一个PowerShell脚本时调用上面的powershell脚本......

Firefox运行......但它不是交互式的(因此PowerShell正在运行并且脚本正在激活。)换句话说,我从未看到过Firefox窗口。我不确定这是否重要,但在我的任务管理器窗口中总是有一个firefox.exe。但是,我的脚本总是挂起,抱怨它无法找到firefox窗口。

就像我说的,这是互动的;它通过任务管理器使用与常规交互式脚本相同的凭据(此框中除了管理员之外只有1个用户);它没有被隐藏,我已经尝试过“以最高权限运行”无济于事。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我尝试做同样的事情时遇到了一些问题, powershell脚本在另一个会话/上下文中运行(我在这里阅读Powershell scripts manipulating desktop elements don't work with 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)

但这不会解决问题,