1

修改说明:

使用下面的建议,我使用了我可以创建的最基本的代码。请注意,我正在使用 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"}
}

这不会触发记事本。如果我看任务管理器,它似乎永远不会填充。我的猜测是,如果这可以解决 - 下面的问题也可以。


我有一个调用 Firefox 并在 Firefox 上触发一堆 SendKeys 的 powershell 脚本(这是一个很长的故事,但尝试使用 web 调用是有问题的。)它可以交互地工作,但是当计划任务运行调用上述的 powershell 脚本时PowerShell脚本...

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

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

有什么想法吗?

4

1 回答 1

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)

然而这并不能解决问题,

于 2013-07-11T09:37:44.470 回答