Exchange PowerShell dans une tâche planifiée s'exécute pour toujours

8

J'ai quelques scripts Exchange 2010 PowerShell que j'aimerais exécuter en tant que tâches planifiées.

Si je lance PowerShell en utilisant "Exécuter en tant qu'utilisateur différent", je peux exécuter les scripts et ils s'exécutent correctement.

Si je planifie une tâche en utilisant ce même utilisateur, la tâche reste à l'état En cours pour toujours.

Comment savoir où la tâche se bloque?

Pour référence, voici comment j'active le truc Exchange:

. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

Et voici les façons dont j'ai essayé d'exécuter le script à partir du Planificateur de tâches:

  • powershell -command "& {. 'c: \ windows \ script.ps1'}"
  • powershell -fichier 'c: \ windows \ script.ps1'
  • powershell -file "c: \ windows \ script.ps1"

Tous avec le même résultat. Grr ...

long cou
la source
Commentant tard à la fête, mais j'ai eu le même comportement. Une tâche planifiée enregistrée à l'aide de PowerShell Register-ScheduledJobn'a jamais «pris fin», elle s'est terminée une fois que j'ai fermé ma console PowerShell et ISE.
user4317867

Réponses:

3

Vous devez soit modifier votre stratégie d'exécution, soit spécifier le -ExecutionPolicy Bypasscomme paramètre de ligne de commande.

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass
TheCompWiz
la source
1
J'ai ajouté l'option ExecutionPolicy à mes paramètres de ligne de commande. Pas de changement; la tâche s'exécute toujours pour toujours.
longneck
2

Je ne sais pas si c'est ainsi que vous le faites, mais lorsque j'exécute des scripts PowerShell via le planificateur de tâches, j'utilise l'action "Démarrer un programme" et sélectionne PowerShell, puis j'ajoute les arguments à partir de là. C'est peut-être ce que vous faites ici, mais ce n'est pas clair. Voici une capture d'écran: entrez la description de l'image ici

Selon la politique d'exécution de TheCompWiz, il peut également y avoir un problème.

ZnewmaN
la source
Ce n'est même pas une syntaxe de ligne de commande valide pour powershell.exe, mais juste pour le diable, je l'ai essayé. La tâche a immédiatement échoué.
longneck
Intéressant car toutes mes tâches quotidiennes de PowerShell fonctionnent de cette façon et elles fonctionnent très bien.
ZnewmaN
C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -command "& 'c: \ windows \ script.ps1'"
ZnewmaN
ah, il y a la différence. votre capture d'écran ne montre pas le-command
longneck
Ouais, en fait, personnellement, je n'utilise pas -command, mais c'est probablement la bonne utilisation.
ZnewmaN
0

J'ai eu le même problème. Dans mon cas, la solution était de spécifier le répertoire "start in" (mon script lirait le contenu d'un fichier qu'il ne trouverait pas car je n'ai pas spécifié le chemin complet du fichier).

Azimut
la source
0

J'ai eu le même problème et le commentaire de "user279399" pour utiliser la commande taskkill était super utile, il fallait juste une modification. Voici ma solution à la fin de la syntaxe des arguments

taskkill /f /fi "USERNAME eq domain\exchadmin" /im powershell.exe

Cette commande ne tue que la session Powershell qui s'exécute sous ce compte d'utilisateur. Il est recommandé d'avoir un compte administrateur Exchange distinct pour exécuter les tâches planifiées.

Leon B
la source
-3

Essayez d'ajouter à la fin de votre script [taskkill / f / im "powershell.exe"] cela tuera tous les processus "powershell.exe". Je ne sais pas comment tuer le processus Power-Shell actuel (équivalent à [cmd.exe / c]). Mais ça fera l'affaire.

user279399
la source
Et si un autre script PowerShell était en cours d'exécution, faisant probablement quelque chose d'important? Souhaitez-vous simplement tuer ces processus sans demander? Sur un environnement de production? En routine? Sérieusement?!
Esa Jokinen du