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


10

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

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

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

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

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


タスクの実行にどのアカウントを使用していますか?どのトリガーを設定しましたか?
camilohe 2015年

システムサービスアカウントとしてタスクを実行してみてください。
SamAndrew81 2015年

回答:


20

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

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

Windows Task SchedulerからのジョブProperties (ほとんどのスクリーンショットを参照)で。。。

  • 1. Generalタブで、印刷画面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
  • 3. Actionsタブ、クリックEdit、およびいることを確認しStart in (optional)、次の例に示すと同じように設定されている(DO NOTは、バッチスクリプトが置かれている場所を指している完全なパスのためにその周りに二重引用符を入れて)なし「最後のバックスラッシュ\画面印刷Cを


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

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

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

  • それはオプションと思われるRun whether user is logged on or notオプションをチェックしなければなりませんRun with highest privilegesタスクスケジューラから予想されるように、それが実際に実行するため。

エラーチェック

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

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


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

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

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

  1. コントロールパネルを開き[管理ツール]、その後、ローカルセキュリティ ポリシー。
  2. [セキュリティ設定]の下で、[ ローカルポリシー]を開き、[ ユーザー権利の割り当て]を強調表示します
  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:。このオプションがオンで、期間が実行中のスクリプトよりも短い場合、タスクスケジューラはそれを早期に強制終了するため、期待どおりの結果が得られない可能性があります。これは、念のためトラブルシューティングを行う際に確認する必要があるものです。

    ここに画像の説明を入力してください

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

    ここに画像の説明を入力してください


プリントスクリーン

印刷画面A

ここに画像の説明を入力してください

印刷画面B

ここに画像の説明を入力してください

印刷画面C

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.