Accès aux variables d'environnement dans une tâche planifiée

14

Lors de la configuration d'une tâche planifiée, pour la section action, j'essaie d'accéder à une variable d'environnement pour l'emplacement de l'exécutable que je souhaite exécuter. C'est principalement parce que sur une machine, l'exécutable pourrait être en C: sur une autre, il pourrait être sur D: J'ai vérifié que si j'utilise un chemin codé en dur, ma tâche planifiée s'exécute, mais si je modifie l'action pour pointer vers "%MyAppPath%\MyApp.exe"la tâche ne commencera pas à subir un échec de lancement. J'ai vérifié que la variable d'environnement est configurée.

Est-il même possible à l'intérieur de la partie action (et répertoire de travail) de la planification des tâches de référencer une variable d'environnement - ma syntaxe est-elle erronée.

En passant, j'ai pensé à appeler un fichier BAT et à y référencer la variable d'environnement, mais cela ne résout rien pour moi car le problème principal est de savoir si l'application (et le fichier bat aussi) est sur C: ou D: lecteurs - à l'intérieur du lecteur lui-même, le chemin est le même.

MISE À JOUR : Il s'avère que vous pouvez les utiliser avec un redémarrage de la machine, mais il existe peut-être une meilleure façon

Paul Hadfield
la source

Réponses:

23

Vous n'avez pas besoin d'un redémarrage de l'ordinateur. Vous devez terminer Taskeng.exe et la prochaine fois que la tâche planifiée est exécutée, il obtiendra un environnement mis à jour.

tsvayer
la source
Merci donc mcuh! Je lutte avec ça depuis des jours. J'ai essayé de redémarrer le service Scheduler en vain dans Win7 / Win2008 (besoin de s'exécuter en tant que SYSTEM pour le redémarrer), mais c'est tellement plus simple!
Timur
2

Je pensais que vous pouviez référencer des variables d'environnement à partir du Planificateur de tâches, mais après avoir juste essayé, cela ne semble pas possible.

La seule exception semble être: %PATH%serait-il possible d'ajouter votre MyAppPathvaleur à la %PATH%collection sur chaque machine, puis d'appeler simplement à MyApp.exepartir du planificateur de tâches, où la machine sera en mesure de résoudre le chemin d'accès complet comme requis?

Stuart McLaughlin
la source
1
Intéressant, j'ai juste essayé avec% PATH% et je n'ai pas pu le faire fonctionner. À ce stade, j'ai remarqué une faute de frappe stupide lorsque j'avais mis à jour% PATH%. J'ai corrigé la faute de frappe et vérifié que PATH était OK dans une boîte DOS, mais la tâche planifiée signalait toujours le problème - indiquant qu'il voyait la "mauvaise" version de% PATH%. Un redémarrage était nécessaire pour reprendre la modification (car vous ne pouvez pas redémarrer le planificateur de tâches). À ce stade, il s'est avéré que je pouvais maintenant utiliser ma variable d'environnement d'origine. Donc, le résultat est que vous pouvez utiliser des variables d'environnement, mais un redémarrage complet de la machine est nécessaire pour détecter toutes les modifications / nouvelles variables d'environnement
Paul Hadfield
Marquera cela comme la réponse car vous aviez raison de pouvoir les utiliser mais si le planificateur de tâches s'est exécuté avant de modifier le travail / d'ajouter la référence à une variable d'environnement, il aura besoin d'un redémarrage de la machine.
Paul Hadfield
2
Voir la réponse de tsvayer - vous n'avez pas besoin de redémarrer la machine. Juste le processus du planificateur de tâches.
Ben Challenor
1

En passant, j'ai pensé à appeler un fichier BAT et à y référencer la variable d'environnement, mais cela ne résout rien pour moi car le problème principal est de savoir si l'application (et le fichier bat aussi) est sur C: ou D: lecteurs - à l'intérieur du lecteur lui-même, le chemin est le même.

%~d0s'étendra à la lettre de lecteur de l'emplacement du fichier de commandes. ( %~dp0pour lecteur + répertoire, etc. )

user1686
la source
1

La réponse de tsvayer n'a pas tout à fait fonctionné pour moi, sur un ordinateur exécutant Windows 7, mais elle m'a indiqué la bonne direction. Le Planificateur de tâches semble être un service sur mon ordinateur; son nom est Schedule; le nom d'affichage est Planificateur de tâches .

Outre le redémarrage à partir de la console MMC Services , il peut être redémarré avec les wmiccommandes suivantes exécutées à partir d'une fenêtre d'invite de commandes (avec des privilèges d'administrateur):

wmic service where "name='Schedule'" call StopService
wmic service where "name='Schedule'" call StartService

Vous pouvez bien sûr également redémarrer le service en utilisant sc:

sc stop Schedule
sc start Schedule

Sur la base d'essais et d'erreurs, il semble suffisant de désactiver puis de réactiver une seule tâche, si c'est tout ce que vous devez affecter:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
Kenny Evitt
la source
0

En passant, j'ai pensé à appeler un fichier BAT et à y référencer la variable d'environnement, mais cela ne résout rien pour moi car le problème principal est de savoir si l'application (et le fichier bat aussi) est sur C: ou D: lecteurs - à l'intérieur du lecteur lui-même, le chemin est le même.

S'appuyant sur la réponse de grawity, j'utilise un processus en deux étapes. Cela me permet d'utiliser le chemin dans d'autres instructions en cas de besoin.

SET WD=%~dp0
pushd %WD%

REMARQUE: pushdchange à la fois le lecteur et le répertoire. Et si vous vouliez être propre, popdquand vous aurez terminé.

Richard
la source