1

改訂された説明:

以下の提案を使用して、作成できる最も基本的なコードを使用しました。以下の「開始プロセス」で Powershell Community Extensions を使用していることに注意してください。それが物事に影響を与えるかどうかはわかりません。

私は以下の機能を持っています

function Populate-Notepad
{
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
Start-Process Notepad 
[Microsoft.VisualBasic.Interaction]::AppActivate("Untitled")
[System.Windows.Forms.SendKeys]::SendWait("blahblahblah")
return
}

インタラクティブにうまく動作します。

POP アカウントを照会する Parse という関数があり、メッセージが見つかった場合はアクションを実行します。したがって、問題のアクションは次のとおりです ($helptext が定義されており、適切に機能します。これは正しく解析されています。)

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

これはメモ帳を起動しません。タスク マネージャーを見ると、データが入力されていないように見えます。私の推測では、これが解決できれば、以下の問題も解決できると思います。


Firefox を呼び出して Firefox で一連の SendKeys を起動する powershell スクリプトがあります (長い話ですが、Web 呼び出しを使用しようとすると問題が発生しました)。対話的には正常に動作しますが、スケジュールされたタスクが上記を呼び出す powershell スクリプトを実行すると、パワーシェルスクリプト...

Firefox は実行されますが、対話型ではありません (したがって、powershell が実行され、スクリプトが実行されます)。つまり、Firefox ウィンドウが表示されません。それが重要かどうかはわかりませんが、タスク マネージャー ウィンドウには常に firefox.exe があります。ただし、私のスクリプトは常にハングし、Firefox ウィンドウが見つからないという不平を言っています。

私が言ったように、これはインタラクティブに機能します。通常の対話型スクリプトと同じように、タスク マネージャーを介して同じ資格情報を使用しています (このボックスには、管理者以外にユーザーが 1 人しかいません)。それは隠されておらず、「最高の特権で実行する」として試してみましたが、役に立ちませんでした。

何かご意見は?

4

1 に答える 1

1

私はまったく同じことをしようとしていくつかの問題を抱えていました.The powershell script is running in another session/context (as i read here Powershell scripts manipulating desktop elements don't work with Scheduler )。

したがって、GUIを使用することはできません。

私の解決策はこれを使用することでした

    (new-object -com wscript.shell).run("http://localhost/",3)

これにより、ローカル Web サイトが全画面表示で開き、既定の 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 に答える