Exchange PowerShell в запланированной задаче работает вечно

8

У меня есть пара сценариев Exchange 2010 PowerShell, которые я хотел бы запустить как запланированные задачи.

Если я запускаю PowerShell с помощью «Запуск от имени другого пользователя», я могу запустить сценарии, и они выполняются правильно.

Если я планирую задачу с использованием того же пользователя, она всегда остается в состоянии «Выполнение».

Как я могу выяснить, где задача застревает?

Для справки, вот как я включаю Exchange:

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

И вот способы, которые я пытался запустить скрипт из планировщика задач:

  • powershell -команда "& {. 'c: \ windows \ script.ps1'}"
  • powershell -file 'c: \ windows \ script.ps1'
  • powershell-файл "c: \ windows \ script.ps1"

Все с одинаковым результатом. Grr ...

длинная шея
источник
Комментировать поздно на вечеринку, но у меня было такое же поведение. Запланированное задание, зарегистрированное с помощью PowerShell, Register-ScheduledJobникогда не «заканчивалось», оно заканчивалось, когда я закрывал консоль PowerShell и ISE.
user4317867

Ответы:

3

Вам нужно либо изменить политику выполнения, либо указать -ExecutionPolicy Bypassпараметр командной строки.

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass
TheCompWiz
источник
1
Я добавил опцию ExecutionPolicy в параметры моей командной строки. Без изменений; задача по-прежнему работает вечно.
Longneck
2

Не уверен, что именно так вы и делаете, но когда я запускаю сценарии PowerShell через планировщик задач, я использую действие «Запустить программу» и выбираю powershell, а затем добавляю оттуда аргументы. Это может быть то, что вы делаете здесь, но это неясно. Вот скриншот: введите описание изображения здесь

В соответствии с политикой выполнения TheCompWiz также может возникнуть проблема.

ZnewmaN
источник
Это даже не правильный синтаксис командной строки для powershell.exe, но я просто попробовал. Задача сразу провалилась.
Longneck
Интересно, потому что все мои ежедневные задачи PowerShell выполняются именно так и работают нормально.
ZnewmaN
C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -command "& 'c: \ windows \ script.ps1'"
ZnewmaN
ах, есть разница ваш скриншот не показывает-command
longneck
Да, лично я не использую -команду, но, вероятно, это правильное использование.
ZnewmaN
0

У меня такая же проблема. В моем случае решение состояло в том, чтобы указать директорию «start in» (мой скрипт считывал содержимое файла, который не мог найти, потому что я не указывал полный путь к файлу).

азимут
источник
0

У меня была та же проблема, и комментарий пользователя «user279399» об использовании команды taskkill оказался очень полезным, просто нужно было его изменить. Вот мое решение в конце синтаксиса аргумента

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

Эта команда убивает только сеанс powershell, который выполняется под этой учетной записью пользователя. Для выполнения запланированных задач рекомендуется иметь отдельную учетную запись администратора Exchange.

Леон Б
источник
-3

Попробуйте добавить в конец вашего скрипта [taskkill / f / im "powershell.exe"], это убьет все процессы "powershell.exe". Я не знаю, как убить текущий процесс Power-Shell (эквивалент [cmd.exe / c]). Но это сделает свое дело.

user279399
источник
А что, если были запущены другие сценарии PowerShell, возможно, выполняющие что-то важное? Вы бы просто убили эти процессы, не спрашивая? На производственной среде? Как рутина? Шутки в сторону?!
Эса Йокинен