Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass

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

Политика выполнения Per TheCompWiz также может быть проблемой.

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

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

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

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

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