1 votes

Le planificateur de tâches de Windows ne peut pas exécuter un fichier sur un lecteur non système.

J'ai un exécutable qui doit être exécuté sur un lecteur E:/, Windows Server 2012 est installé sur le lecteur C:/. J'ai créé une tâche planifiée qui contient le chemin d'accès complet à l'exécutable cible (E:/stuff/target.exe), et dont le répertoire de travail est défini (E:/stuff/).

Cela échoue, le planificateur de tâches me dit que le nom du répertoire n'est pas valide. Si je supprime le répertoire de travail, il me dit que l'accès est refusé. Ce n'est pas possible, le disque entier est à la fois partagé et a des autorisations de fichiers définies sur "tout le monde" avec un contrôle total. Le compte qui exécute la tâche peut certainement l'exécuter (je peux le faire via cmd.exe). Sidenote : J'ai essayé toutes les permutations du chemin, en utilisant des barres obliques inverses, des barres obliques avant, des guillemets ou non. Ce n'est pas dû à KB2452723 .

J'ai essayé d'avoir un fichier batch qui utilise "CD" pour définir le répertoire de travail à E:/stuff/, puis d'appeler le programme, qui fonctionne lorsque je l'exécute. Malheureusement, lorsqu'il est exécuté par le planificateur de tâches, il ne change jamais le répertoire de travail et essaie d'appeler target.exe depuis le lecteur système (où il n'existe pas).

J'ai également essayé de créer un lien symbolique ("mklink /D") de C:/temp/ vers E:/stuff/, dans le vain espoir de tromper le planificateur de tâches, mais il ne suit pas le lien et me dit que le répertoire n'a pas été trouvé.

Je n'arrive pas à comprendre pourquoi le planificateur de tâches s'y oppose tant, ni quelle serait la pratique correcte pour que cela fonctionne. Quelqu'un a-t-il réussi à exécuter un fichier sur un lecteur non système avec le planificateur de tâches ?

5voto

Knetic Points 263

Après m'être tapé la tête contre le mur pendant quelques heures, j'ai trouvé une solution. Il semble que dans Server 2012, les tâches planifiées ne peuvent pas toucher les répertoires qui n'ont pas de nom de domaine. autorisations explicites pour le compte que vous utilisez pour exécuter le fichier. Il importe peu que ce compte fasse partie d'un groupe qui est autorisé à accéder au répertoire.

par exemple, si je veux exécuter E:/stuff/target.exe en utilisant le compte THINGS \svcAccount puis THINGS \svcAccount doit doit recevoir explicitement le contrôle total sur E:/stuff pour pouvoir fonctionner. J'avais supposé que si THINGS \svcAccount était dans le groupe des administrateurs, et que le groupe des administrateurs avait le contrôle total de E:/stuff, il hériterait des permissions. Le serveur 2012 ne fait pas cela.

Cela ne semble s'appliquer qu'aux tâches planifiées, c'est-à-dire à l'exécution d'une fenêtre de commande ou d'une fenêtre powershell en tant que THINGS. \svcAccount fonctionne exactement comme prévu.

4voto

Brian Points 8766

Les mappages de lecteurs ne sont pas vus par les services ou les tâches. Utilisez plutôt un chemin UNC.

\\server\share\directory\someprogram.exe

Une autre option consiste à programmer l'exécution d'un fichier batch et à y inclure un mappage de lecteur. Dans un fichier batch, il est plus facile d'utiliser pushd/popd pour mapper sans se soucier de la lettre de lecteur qu'il obtient (pushd peut mapper sur une lettre de lecteur et passer à cette lettre de lecteur, popd peut démapper et revenir à la lettre de lecteur précédente).

pushd \\server\share
\directory\someprogram.exe
popd

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X