OS:Windows Server 2008 R2 Enterprise
ログオフしている間、タスクスケジューラに.batファイルを実行させることができません。使用したい本番用の.batファイルがありますが、トラブルシューティングのためにC:\ Users\Administrator\Desktop\test.batを使用しています
test.batは非常に簡単です。含まれているのは:taskkill/im notepad.exe
単独で正常に実行されます。メモ帳を開いたままtest.batをダブルクリックすると、cmdウィンドウが点滅し、メモ帳が停止します。 .batファイルは問題ではありません。
タスクスケジューラで作成したタスクは、「タスクキルのテスト」です(引用符なし)。 Windows Explorerでその場所を確認できます:C:\ Windows\System32\Tasks\Test taskkill
ユーザーがログオンしているときにのみタスクが実行されるように設定されている場合、タスクは機能します。この設定では、右クリックして実行することができ、.batファイルをダブルクリックした場合と同じ動作になります。これは、タスクが正しく構成されていることを意味します。
ユーザーがログオンしているかどうかに関係なく実行するように設定した場合、右クリックして[実行]をクリックしても明らかなことは何も起こりません。ジョブは履歴で正常に実行されたと報告されますが、メモ帳は存続します。タスクを実行するために構成しているアカウントに適切な資格情報を使用していることを知っています。そのアカウントはローカル管理者です。
この問題は、他の人が過去に抱えていた問題に似ています:
2番目のリンクのスレッドは、タスクの実行に使用されるアカウントに.batファイルおよび.batファイルが変更するすべてのファイルへの明示的な許可が必要であるという提案で、多くの人々の同一の問題を解決するように見えました。これは非常に有望でした(面倒な要件の場合)。ただし、ローカル管理者に次の領域に対する明示的なアクセス許可を確認または割り当てましたが、まだ成功していません。
さらに、ローカル管理者アカウントがローカル管理者グループに属していることを確認しました。
設定する必要がある他のアクセス許可がありませんか?私が見なければならない何かがありますか?ありがとう!
私は、私の機関のために他の仕事をしていた請負業者の助けを借りてこの問題を解決しました。
タスクのプロパティウィンドウの[アクション]タブで、バッチファイル(この場合はtest.bat)を開くアクションを作成または編集するときに、[プログラム/スクリプト:]フィールドと[開始] in(オプション): "フィールド。以前は、ファイルへのフルパスを含む「プログラム/スクリプト:」フィールドがあり、ファイル名で終わり、「開始(オプション):」フィールドはヌルでした。タスクのプロパティウィンドウの[全般]タブでタスクが[ユーザーがログオンしているときのみ実行する]に設定されている場合、この構成は問題なく動作するようです。ただし、タスクが「ユーザーがログオンしているかどうかに関係なく実行する」に設定されている場合、この構成は機能しません。
問題を解決するために、「Program/script:」フィールドにファイルパスではなくファイル名のみが含まれるようにアクションを変更しました。 [開始(オプション):]フィールドにファイルパスを配置します。この設定は、タスクが「ユーザーがログオンしているときにのみ実行する」に設定されている場合に機能します!タスクをトリガーで実行し、手動で実行することでテストしました。
これが役立つかどうかわかりません。私の問題は、対話型プログラム(特にExcel)も使用していました。
2つの空のフォルダー(デスクトップ)を作成すると解決しました。 x64で実行している場合でも両方を作成します。
C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop
コードをデバッグし、この行でコードが終了したことに気付きました
ExcelFile excelFile = new ExcelFile(directory, filename);
私はどこかでこの解決策を読みましたが、今はURLが見つかりません。
同様の問題がありましたが、実行可能なバッチファイルのパスにスペースがあったという事実に関連していました。スペースを削除しましたが、現在は正常に機能します。
私にとっては、パスが使用可能であることを確認するのが効果的でした。
net Use Zを使用しました:\ computername\folder/persistent:yes
次に、xxcopy/s/c/d/e/i/y D:*。* z:\ BackupBat
私は他のすべての.batが正常に動作することに気付きました。マップフォルダーへの参照を持つものだけが実行されていないため、問題になる必要があります。これらの変更により、batファイルは正常に動作します。
これも試してみてください。
「バッチジョブとしてログオン」セキュリティポリシーを設定することにより、「ユーザーがログオンしているかどうかに関係なく実行する」を解決しました。
設定の詳細は次のとおりです。 https://danblee.com/log-on-as-batch-job-rights-for-task-scheduler/
別のアプローチを取ることもできますが、手順は次のとおりです。1)「バッチジョブとしてログオン」セキュリティポリシーに管理者アカウント(タスクを実行する)を追加して、デフォルトドメイングループポリシーを更新しました。 (ADMINグループがリストされていて、管理者アカウントを使用している場合でも)2)クライアントでGPUPDATEを強制しました3)クライアントをリブートしました4)クライアントのポリシーを見て、DC 5)「ユーザーがログオンしているかどうかに関係なく実行する」タスクを設定します6)タスクをオンデマンドで実行し、PDFファイルを作成しました。スケジュールされた時間にタスクを実行し、PDFファイルを作成しました。
次のことを確認することは私のために働いた:
1)タスクスケジューラの[ユーザーがログインしていない場合に実行する]オプションは、対話モードのプログラムでは機能しません。メモ帳、時計の例。タスクはインタラクティブに実行されません。プログラムがインタラクティブなアクションを必要としないことを確認してください。
2)プログラムパスがシステムパスのいずれでもない場合は、「開始(オプション)」をチェックします。プログラムパスを追加することをお勧めします。 [プログラム/スクリプト]で、プログラムの名前のみを入力し、[開始]にスクリプトのパスを入力します。
3)プログラム用にセットアップするユーザーアカウントには、プログラム自体を実行する権限だけでなく、プログラムに関連する他のすべてのプログラムを実行する権限も必要です。
サンプルプログラムを次に示します。
C:\ myprogram\folderOne\test.cmd
date /t >> c:\Temp\testAuto.log
date /t >> c:\temp\testAuto.log
echo ----->> c:\temp\testAuto.log
cls
exit
-タスクを作成し、[全般]> [セキュリティオプション]で[ユーザーがログオンしているかどうかに関係なく実行する]を選択します。 cmdウィンドウは非常にすばやく開いたり閉じたりします。 testAuto.logファイルはc:\ tmpフォルダーにあります。
あなたが許可を持っていないためかもしれません。 Mは同じ問題に直面しており、私はこのような解決策を見つけました-プロパティよりもタスクを右クリックします。プロパティで[全般]タブをクリックし、[ユーザーグループまたはユーザー]をクリックして、適切なユーザーを選択します。