web-dev-qa-db-ja.com

ログインしていないユーザーがタスクスケジューラからバッチファイルを実行する

Windows 7でタスクスケジューラからバッチファイルを実行しようとしています。コマンドプロンプトから実行すると、バッチファイルを正常に実行できます。

タスクスケジューラから実行して、ユーザーがログインしているときにのみ実行する場合、タスクは問題なく実行されます。ただし、ユーザーがログインしていないときに実行すると、タスクスケジューラはファイルを実行しているように見えますが、何も起こりません。

バッチファイルの内容が原因ではないことを確認するために、バッチファイルを次の行に変更しようとしました。

echo "success" >> c:\temp\test.log

そしてそれは機能しません。何か案は?最高の権限と、バッチファイルとファイルが書き込まれているフォルダーへの完全なアクセス許可を持つ管理者アカウントで実行しています。

10
yhussain

タスクスケジューラ:スケジュールされたバッチスクリプトが実行されていません

タスクスケジューラのプロパティ。。。

Windowsから_Task Scheduler_ジョブで Properties (一番下のスクリーンショットを参照) 。 。

  • 1.Generalタブで、Print Screen Aに示すように、以下のオプションが選択/チェックされているかチェックされていないことを確認します

    • チェックを外す_Run only when user is logged on_
    • チェック_Run whether user is logged on or not_
    • チェック_Run with the highest privileges_
  • 2.Conditionsタブで、以下のオプションが印刷画面Bと同じように選択オン、またはオフであることを確認します

    • チェック_Wake the computer to run this task_
  • .Actionsタブ、Edit、およびStart in (optional)が、バッチスクリプトが置かれている場所を指す完全パスに対して、以下の例(DO NOTで囲む)のように設定されていることを確認しますあり[〜#〜]なし[〜#〜]最後のバックスラッシュ "_\_" Print Screen C


セキュリティに関する考慮事項

  • OK(上記の2.)資格情報を実行するように求めるプロンプトが表示され、その資格情報がEXECUTEが存在するバッチファイルへのアクセスを必要とするものであり、また、スクリプトを実行して実行したバッチファイルを実行するためのアクセス権も必要です。

  • このプロセスの静的サービス/プロキシユーザーアカウントをセットアップし、その資格情報を使用してプロセスを実行するのが最善の方法です。パスワードが強力で、無期限に設定されていることを確認する必要があります。また、EXECUTEバッチにアクセスし、バッチスクリプトプロセスが実行しているもの、コマンドやリソースなどを実行する必要があります。それも利用します。

  • オプション_Run whether user is logged on or not_のようです。タスクスケジューラから期待どおりに実行するには、オプション_Run with highest privileges_を確認する必要があります。

エラーチェック

  • 実際のバッチスクリプトに問題があるが、Windows タスクスケジューラは実際にそれを実行してそれを実行しますが、何らかの理由でバッチスクリプトロジックがエラーになるなどの場合、タスクスケジューラはこのレベルでこの障害を認識しない場合があります。その観点から(デフォルトではほとんどの場合)、バッチファイルを実行しているので、実行可能であり、そのためのアクセス権があれば、ジョブは正常に実行されます。

  • エラーチェックまたはロギングをバッチスクリプトロジックに追加して、セキュリティコンテキストの確保を含め、このレベルでキャッチ(またはトラブルシューティング)の問題を追加します。バッチスケジューラが実行するコマンド、リソースなどへの適切なアクセス権を持つバッチスケジューラがそれを実行します。


グループポリシーに関する考慮事項

グループポリシーを確認し、バッチジョブの権限としてログオン

回答:Windowsでは、この特権はローカルまたはドメインセキュリティポリシーを通じて付与されます。 ローカルセキュリティポリシーを使用してこれを行うには、次の手順に従います。

  1. コントロールパネル管理ツールを開き、次にローカルセキュリティポリシーを開きます。
  2. Security Settingsの下でLocal Policiesを開き、ser Rights Assignmentを強調表示します。
  3. バッチジョブとしてログオンを見つけます。 プロパティを開き、この権限を必要とするユーザーを追加します。
  4. 終了したら、保存変更を加えてローカルセキュリティ設定ウィンドウを閉じます。

変更はすぐに反映されます。ドメインセキュリティポリシーを変更するには、ドメインコントローラでコントロールパネルドメインセキュリティポリシーユーティリティを使用します


マップされたドライブまたは完全なUNCパスを使用したバッチスクリプトロジック、および問題。 。 。

スクリプトがマップされたネットワークドライブを参照しているが、それを_Run whether the user is logged on or not_にしたい場合、このコンテキストでは、バッチプロセスが期待どおりのことを行うためのドライブマッピングが実際には存在しない可能性があります。

問題を回避するために、可能であれば、マップされたドライブ文字ではなく、UNCパスをバッチスクリプトロジックで使用します。それ以外の場合は、バッチプロセスの最初に_PUSHD \\ServerName\ShareName_を使用し、バッチプロセスの最後にPOPDを使用する必要があります。バッチプロセスの最初に_Net Use X: \\ServerName\ShareName_を使用してドライブをマップし、バッチプロセスの最後に_Net Use X: /DELETE_を使用してドライブを切断することができます。


その他

  • MS HOTFIX(KB977353):Windows 7またはWindows Server 2008 R2を実行しているクライアントコンピューターでグループポリシーの即時タスク基本設定項目が実行されない

  • スケジュールされたタスクの Settings タブおよび_Stop the task if it runs longer than:_としてリストされているオプション。このオプションがチェックされていて、期間が実行中のスクリプトよりも短い場合、タスクスケジューラはそれを早期に強制終了するため、期待どおりの結果が得られない可能性があります。これは、万が一に備えてトラブルシューティングを行うときに確認する必要があるものです。

    enter image description here

  • から Triggers を選択すると、スケジュールされたタスクのタブ Edit オプションは必ず_Start:_の時刻と日付がまだ渡されていない値であることを設定してください。日付と時刻がFutureの値に設定されていることを確認してください。それ以外の場合は、ジョブが予想どおり次のスケジュールされた時刻に実行するようにスケジュールされていることに気付く場合があります。ただし、これはタスクスケジューラによって実行されず、タスクスケジューラHistoryタブにも実行されないことが示されます(実行されないため)。トリガーを編集し、将来の日付や時刻で更新するだけで、問題が発生した場合にこの問題を解決できます。

    enter image description here


プリントスクリーン

印刷画面A

enter image description here

印刷画面B

enter image description here

印刷画面C

enter image description here

20
Pimp Juice IT