2013-06-21 63 views
1

修改後的描述:計劃的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帳號,如果找到了一個消息 - 執行一個動作。有問題的行爲是這樣($幫助文件的定義,它工作正常 - 這是被正確解析)

Switch ($cmd) 
{ 
"HELP"  {$text = $helptext} 
"NOTE"  {populate-notepad} 
default {$msg = $msg + "Invalid command: $command `n"} 
} 

這並不火記事本。如果我看任務管理器,它永遠不會出現填充。我的猜測是,如果這可以解決 - 下面的問題也可以解決。


我有調用Firefox和火的火狐一堆的SendKeys的(這是一個很長的故事,但試圖利用網絡invokation是有問題的。)它的工作原理交互很好,但PowerShell腳本當計劃任務運行一個PowerShell腳本,調用上面的PowerShell腳本...

Firefox運行...但它不是交互式的(所以PowerShell正在運行,腳本正在觸發。)換句話說,我從來沒有看到一個Firefox窗口。我不確定這是否重要,但我的任務管理器窗口中總是有一個firefox.exe。但是,我的腳本總是掛起,抱怨它無法找到Firefox窗口。

就像我說的,這是交互式工作;它通過任務管理器使用與常規交互式腳本相同的憑據(在此框中,除管理員以外,只有1個用戶);它不是隱藏的,我試過它作爲「以最高權限運行」而無濟於事。

有什麼想法?

+0

請編輯您的問題,並添加通過調用Firefox中的命令。同時檢查事件日誌或Firefox可能導致錯誤的任何其他日誌。最後,例如,對'notepad.exe'嘗試相同的操作。 –

回答

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) 

然而,這將不能解決問題,