4

複数のホストで夜間に実行する予定の Powershell スクリプトがあります。タスクスケジューラに設定したCMDスクリプト(ラッパー)で実行します。

場合によっては、午前中に到着するメッセージをユーザーに表示し、スクリプトの実行を続行するか中止するかをユーザーに決定させる必要があります。

メッセージを表示するために system.windows.froms.MessageBox::Show("My Message","status","4") を使用しています。

Windows PowerShell ISE コンソールから CMD スクリプトを実行すると完全に機能しますが、タスク スケジューラから実行するとポップアップ メッセージがスキップされます。

その問題の解決策はありますか?

4

1 に答える 1

4

デスクトップと対話できるようにするには、スケジュールされたタスクを「ユーザーがログオンしているときにのみ実行する」に設定する必要があります (ダイアログの表示など)。

そのため、メイン スクリプトをバックグラウンドで実行する必要がある場合 (ユーザーがログインしていない場合でも)、プログラム ロジックを 2 つのスケジュールされたタスクから実行される 2 つのスクリプトに分割する必要があります。

  • 「ユーザーがログオンしているかどうかに関係なく実行する」でバックグラウンド スクリプトを実行する 1 つのスケジュールされたタスク
  • バックグラウンド タスクがまだ実行されているかどうかを確認し、ダイアログを表示するスクリプトを実行する別のスケジュールされたタスク。この「GUI タスク」は、「ユーザーがログオンしているときにのみ実行する」ように設定し、ex でトリガーする必要があります。「ログオン時」。

明らかに、2 つのスクリプトは何らかの形で (ファイル、REST API などを介して) 通信する必要があります。

于 2016-03-09T19:02:59.627 に答える