web-dev-qa-db-fra.com

Le planificateur de tâches ne peut pas ouvrir le fichier de commandes lorsqu'il est configuré pour être exécuté, que l'utilisateur soit connecté ou non

Système d'exploitation: Windows Server 2008 R2 Enterprise

Je ne parviens pas à faire en sorte que le planificateur de tâches exécute des fichiers .bat lorsque je suis déconnecté. Je souhaite utiliser un fichier de production .bat, mais pour le dépannage, j'utilise C:\Utilisateurs\Administrateur\Bureau\test.bat.

test.bat est très simple. Tout ce qu'il contient est: Taskkill/im notepad.exe

Il fonctionne avec succès seul. Si le Bloc-notes est ouvert et que je double-clique sur test.bat, la fenêtre cmd clignote et le Bloc-notes meurt. Le fichier .bat n'est pas le problème.

La tâche que j'ai créée dans le Planificateur de tâches est "Test taskkill" (sans les guillemets). Je peux voir son emplacement dans l'Explorateur Windows: C:\Windows\System32\Tasks\Test taskkill

Si la tâche est configurée pour ne s'exécuter que lorsque l'utilisateur est connecté, elle fonctionne. Avec ce paramètre, je peux cliquer avec le bouton droit de la souris sur> exécuter et obtenir le même comportement que si je double-cliquais sur le fichier .bat. Cela signifie que la tâche est configurée correctement.

Si je le configure pour qu'il fonctionne ou non, l'utilisateur est connecté, puis, lorsque je clique avec le bouton droit de la souris sur>, rien ne se passe. Le travail est signalé comme ayant été exécuté avec succès dans l'historique, mais le bloc-notes survit. Je sais que j'utilise les informations d'identification appropriées pour le compte que je configure pour exécuter la tâche. Ce compte est l'administrateur local.

Ce problème semble similaire à d'autres que ceux rencontrés dans le passé:

Exécution d'un fichier .bat dans une tâche planifiée

http://social.technet.Microsoft.com/Forums/windowsserver/en-US/d47d116e-10b9-44f0-9a30-7406c86c2fbe/scheduled-task-wont-run-bat-file?forum=winservermanager

Le fil dans le deuxième lien semblait résoudre un problème identique pour de nombreuses personnes en suggérant que le compte utilisé pour exécuter la tâche nécessite une autorisation explicite pour le fichier .bat et tous les fichiers modifiés par le fichier .bat. C'était très prometteur (si une exigence ennuyante). Cependant, j'ai confirmé ou attribué des autorisations explicites à l'administrateur local pour les domaines suivants, et je n'ai toujours pas réussi:

  • C:\Utilisateurs\Administrateur\Bureau \
  • C:\Utilisateurs\Administrateur\Bureau\test.bat
  • C:\Windows\System32\Tasks \
  • C:\Windows\System32\Tasks\Test taskkill

De plus, j'ai confirmé que le compte d'administrateur local est dans le groupe d'administrateurs locaux.

Me manque-t-il d'autres autorisations à définir? Y a-t-il autre chose que je devrais regarder? Merci!

13
MasterOfNone

J'ai résolu ce problème avec l'aide d'un entrepreneur qui effectuait un autre travail pour mon institution.

Dans la fenêtre de propriétés de la tâche, sous l'onglet Action, lors de la création ou de la modification de l'action qui ouvre le fichier de traitement par lots (dans mon cas test.bat), se trouve le champ "Programme/script:", ainsi qu'un "Démarrer dans (facultatif): "champ. J'avais précédemment le champ "Programme/script:" contenant le chemin complet du fichier, se terminant par le nom du fichier, et le champ "Démarrer dans (facultatif):" null. Cette configuration semble fonctionner sans problème lorsque la tâche est définie sur "Exécuter uniquement lorsque l'utilisateur est connecté" dans l'onglet Général de la fenêtre des propriétés de la tâche. Toutefois, cette configuration ne fonctionne pas lorsque la tâche est définie sur "Exécuter si l'utilisateur est connecté ou non".

Afin de résoudre le problème, j'ai modifié l'action pour que le champ "Programme/script:" contienne uniquement le nom du fichier, pas son chemin. Je mets le chemin du fichier dans le champ "Démarrer dans (facultatif):". Cette configuration fonctionne lorsque la tâche est définie sur "Exécuter uniquement lorsque l'utilisateur est connecté"! J'ai testé avec la tâche exécutée sur un déclencheur et également avec son exécution manuelle.

17
MasterOfNone

Pas sûr que cela aide. Mon problème utilisait également un programme interactif (notamment Excel).

La création des 2 dossiers vides (Bureau) l’a résolu. Créez les deux même si vous utilisez x64.

C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop

J'ai débogué mon code et réalisé que le code était sorti sur cette ligne

ExcelFile excelFile = new ExcelFile(directory, filename);

J'ai lu cette solution quelque part et je ne trouve pas l'URL maintenant.

1
maryhadalittlelamb

J'avais un problème similaire, mais il était lié au fait qu'il y avait un espace dans le chemin de mon fichier de commandes exécutable. J'ai supprimé l'espace et maintenant cela fonctionne bien.

1
FerFig

Ce qui a fonctionné pour moi était de s’assurer que le chemin est disponible.

j'ai utilisé Net Use Z:\nom_ordinateur\folder/persistent: oui 

puis xxcopy/s/c/d/e/i/y D: *. * z:\BackupBat 

Je remarque que tous mes autres travaux .bat fonctionnent bien. Seul celui avec la référence à un dossier de carte était celui qui ne fonctionnait pas, ce qui doit être le problème. avec ces changements, le fichier chauve-souris fonctionne bien.

1
Janet Batlle

La vérification de ce qui suit a fonctionné pour moi:

1) L'option "Exécuter si l'utilisateur n'est pas connecté" dans le Planificateur de tâches ne fonctionne pas pour les programmes en mode interactif. Exemple de bloc-notes, horloge. Les tâches ne seront pas exécutées de manière interactive. Assurez-vous que votre programme ne nécessite aucune action interactive.

2) Cochez la case "Démarrer dans (facultatif)" si le chemin du programme n’est pas l’un des chemins du système. Vous avez intérêt à y ajouter votre chemin de programme. Dans "Programme/Script", entrez uniquement le nom du programme, puis entrez le chemin de votre script dans "Démarrer dans".

3) Le compte d’utilisateur que vous avez configuré pour votre programme doit avoir l’autorisation non seulement d’exécuter votre programme lui-même, mais également d’exécuter tous les autres programmes liés à votre programme.

Voici un exemple de programme: 

Sur C:\myprogram\folderOne\test.cmd

date /t >> c:\Temp\testAuto.log
date /t >> c:\temp\testAuto.log
echo ----->> c:\temp\testAuto.log
cls
exit

-Créez des tâches en sélectionnant Général> Options de sécurité "Exécuter si l'utilisateur est connecté ou non" .____. Entrez Action> Programme/script: test.cmd sur "Démarrer dans" C:\myprogram\folderOne - Run, vous pouvez voir les fenêtres cmd s'ouvrir et se fermer très rapidement. Le fichier testAuto.log doit être dans le dossier c:\tmp.

0
mercedes

C'est peut-être parce que vous n'avez pas la permission. M rencontrant le même problème et j'ai trouvé la solution comme ceci - Faites un clic droit sur votre tâche que dans les propriétés . Dans les propriétés, cliquez sur l'onglet Général, puis cliquez sur 'Groupe d'utilisateurs ou Utilisateur' et sélectionnez l'utilisateur approprié.

0
Brijesh Rana