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 ...


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

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.


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).


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.


-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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.