修订说明:
使用下面的建议,我使用了我可以创建的最基本的代码。请注意,我正在使用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个用户);它没有被隐藏,我已经尝试过“以最高权限运行”无济于事。
有什么想法吗?
答案 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)
但这不会解决问题,