У меня есть несколько сценариев 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]). Но это поможет.