Подтвердить что ты не робот

Powershell script не запускается через запланированные задачи

У меня есть небольшой script на моем контроллере домена, который настроен для отправки по электронной почте мне через SMTP о последнем событии безопасности 4740.

script, когда выполняется вручную, будет запускаться по назначению; однако при настройке для запуска с помощью запланированных задач и, несмотря на то, что он показывает, что был выполнен, ничего не происходит (нет электронной почты).

script выглядит следующим образом:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

$Event = Get-EventLog -LogName Security -InstanceId 4740 -Newest 5
$MailBody= $Event.Message + "`r`n`t" + $Event.TimeGenerated

$MailSubject= "Security Event 4740 - Detected"
$SmtpClient = New-Object system.net.mail.smtpClient
$SmtpClient.host = "smtp.domain.com"
$MailMessage = New-Object system.net.mail.mailmessage
$MailMessage.from = "[email protected]"
$MailMessage.To.add("toemail.domain.com")
$MailMessage.IsBodyHtml = 1
$MailMessage.Subject = $MailSubject
$MailMessage.Body = $MailBody
$SmtpClient.Send($MailMessage)

Запланированная задача настраивается следующим образом:

RunsAs:LOCAL SYSTEM

Trigger: On event - Log: Security, Event ID: 4740

Action:  Start Program - C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

  Argument:  -executionpolicy bypass c:\path\event4740.ps1

Я также пробовал следующее:

Trigger: On event - Log: Security, Event ID: 4740

Action:  Start Program - C:\path\event4740.ps1

В соответствии с историей задач: начатой ​​задачей, начатым действием, созданным процессом задачи, завершенным действием, завершенной задаче. Я просмотрел несколько ссылок на сайте с той же "проблемой", но все они, похоже, имеют какую-то переменную, которой у меня нет. Я также пробовал некоторые из упомянутых решений, думая, что они могут быть несколько связаны, но, увы, ничего не работает. Я даже попытался удалить мою запланированную задачу и сбросить ее, как указано здесь: http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/11/weekend-scripter-use-the-windows-task-scheduler-to-run-a-windows-powershell-script.aspx

Кто-нибудь запускает этот тип ошибки раньше или знает, как обойти эту проблему?

Устранение неполадок:

Я решил попробовать позвонить в .bat файл по запланированной задаче. Я создал простой файл, который будет отображать текущую дату/время в контролируемой папке. Запуск файла вручную и с помощью задачи, инициированной событием 4740, достигли желаемых результатов. Изменение файла .bat вместо вызова файла .ps1 работало вручную. Когда срабатывает событие 4740, теперь байт больше не будет работать.

4b9b3361

Ответ 1

Обнаружено успешное обходное решение, применимое для моего сценария:

Не выходить из системы, просто заблокируйте сеанс!

Поскольку этот script работает на контроллере домена, я вхожу на сервер через консоль удаленного рабочего стола и выхожу из сервера, чтобы завершить сеанс. При настройке задачи в планировщике заданий я пользовался учетными записями пользователей и локальными службами, у которых не было доступа к запуску в автономном режиме, или для входа в систему строго для запуска script.

Благодаря помощи по устранению неполадок у Коула я подумал о функции RunAs и решил попробовать работать с неработающими входами.

Начиная с Планировщика заданий, я удалил созданные вручную задачи. Используя новую функцию в Server 2008 R2, я перешел к событию безопасности 4740 в средстве просмотра событий и использовал щелчок правой кнопкой мыши > Прикрепить задачу к этому событию... и выполнил подсказки, указав на мой script в действии стр. После того, как была создана Задача, я заблокировал сеанс и прекратил подключение к удаленному рабочему столу. В профиле "Заблокировано" и не выходить из системы, все работает так, как должно.

Ответ 2

Измените свое действие на:

powershell -noprofile -executionpolicy bypass -file C:\path\event4740.ps1

EDIT: Обновлено

На сервере Windows 2008 R2: в планировщике заданий под вкладкой "Общие" - Убедитесь, что пользователь runAs установлен в учетную запись с необходимыми разрешениями для выполнения script.

Кроме того, я считаю, что у вас включен параметр "Запускать только при входе пользователя". Измените это на "Запустить, был ли пользователь включен или нет". Оставьте флажок "Не сохранять пароль" не установленным, и вам, вероятно, потребуется отмеченная опция "Выполнить с наивысшими привилегиями".

Ответ 3

Хотя вы, возможно, уже нашли решение своей проблемы, я все равно опубликую эту заметку, чтобы помочь кому-то другому. Я столкнулся с подобной проблемой. В основном я использовал другую учетную запись домена для тестирования и сравнения. Задача работала нормально, когда был установлен флажок "Запустить, был ли пользователь включен или нет".

Несколько вещей, о которых нужно помнить и убедиться:

  • Учетная запись, используемая для выполнения задачи, должна иметь права "Вход в систему как пакетное задание" в соответствии с локальной политикой безопасности сервера (или быть членом локальной группы Admin). Вы должны указать учетную запись, необходимую для запуска файлов сценариев /bat.
  • Убедитесь, что вы вводите правильные символы пароля
  • Задачи в 2008 году R2 не запускаются в интерактивном режиме специально, если вы запустите их как "Запустить, включен ли пользователь или нет". Вероятно, это будет неудачно, если на script вы ищете любые объекты\ресурс, специфичные для профиля пользователя, когда задача была создана в качестве сеанса powershell, эта информация будет запущена, в противном случае она начнется и немедленно закончится. В качестве примера для определения $Path при запуске script используется как "Запустить, был ли пользователь включен или нет", и я указываю сопоставленный диск. Он будет искать этот диск, когда задача начнется, но поскольку учетная запись пользователя, проверенная для запуска задачи, не зашла в систему, а на script вы ссылаетесь на источник\объект, который ему нужно работать против него нет задача просто прекратится. (\ server\share) x:\vs. Фактический путь UNC\сервер\общий ресурс
  • Просмотрите свои шаги, script, аргументы. Иногда самая маленькая часть может иметь большое значение, даже если вы делали этот процесс много раз. Я иногда пропускал символ при вводе пароля или полуколонии при создании script или задачи.

Проверьте предоставленную ссылку и, надеюсь, вы или кто-то другой можете воспользоваться этой информацией. Будьте в безопасности.

https://technet.microsoft.com/en-us/library/cc722152.aspx

Ответ 4

В дополнение к советам сверху я получал ошибку и нашел решение по следующей ссылке http://blog.vanmeeuwen-online.nl/2012/12/error-value-2147942523-on-scheduled.html.

Также это может помочь:

В планировщике задач щелкните свойства запланированных заданий, затем параметры.

В последнем списке: "если задача уже запущена, применяется следующее правило: Выберите "остановить существующий экземпляр" в раскрывающемся списке.

Ответ 5

Я думаю, что ответ на это тоже уместен:

Почему моя запланированная задача обновляет свое "последнее время выполнения" правильно и дает "последний результат выполнения" из "(0x0)" , но все еще не работает?

Сводка: В запланированных задачах Windows 2012 не отображаются правильные переменные среды, в том числе PATH, для учетной записи, для которой задана заданная задача. Но вы можете проверить это, и если это произойдет, и как только вы поймете, что происходит, вы можете обойти это.

Ответ 6

Чтобы добиться функциональности "Запуск от имени администратора", я применил флаг:

-ExecutionPolicy Bypass

Что только кажется, что вступает в силу при выполнении файлов Powershell. Поэтому я отбросил свою команду в файл .ps1, запустил ее с помощью -ExecutionPolicy Bypass, и теперь моя запланированная задача ведет себя как ожидалось.

Program: Powershell.exe
Add Arguments: -ExecutionPolicy Bypass -File C:\pscommandFile.ps1

Ответ 7

У меня была почти та же проблема, что и у Server 2012 R2. У меня есть powershell script в планировщике заданий, который копирует 3 файла из одного места в другое. Если я запускаю script вручную из powershell, он работает как шарм. Но при запуске из Task Scheduler он копирует только первые 2 небольших файла, а затем вставляет 3-й (большой файл). И я также получил результат "Оператор или администратор отказался от запроса". И я сделал почти все на этом форуме.

Вот сценарий и как я его исправил. Может не работать для других, но на всякий случай:

Сценарий: 1. Powershell script в планировщике заданий 2. Ran, используя учетную запись домена, которая является локальным администратором на сервере 3. Выбрано "Запустить, вошел ли пользователь в систему или нет" 4. Запуск с наивысшими привилегиями

Fix: 1. Мне пришлось войти на сервер с помощью учетной записи домена, чтобы он создал локальный профиль в C:\Users. 2. Проверено и сделало пользователя, что пользователь имеет доступ ко всем дискам, на которые я ссылался на своем script

Я считаю, что №1 является основным для меня. Я надеюсь, что это сработает для других.

Ответ 8

Я бродил в течение двух дней для решения, если нашел следующее:

1) Запустите для этого файл powershell.exe для этого

  • щелкните правой кнопкой мыши значок powershell.exe
  • нажмите на свойства под клавишей быстрого доступа.
  • нажмите кнопку "Дополнительно", чтобы проверить запуск как администратор проверено.

2) в окне планировщика задач под панелью актина ad после script в качестве новой команды

%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -ExecutionPolicy Bypass -noexit -File "C:\ps1\BackUp.ps1"

Ответ 9

Пожалуйста, убедитесь, что аргументы указаны в нижнем регистре, как указано Cole9350

Ответ 10

Если у вас проблема с WIN 10, это может решить проблему ур, как и для меня. Обновление испортило планировщик задач.

http://answers.microsoft.com/en-us/windows/forum/windows_10-performance/anniversary-update-version-1607-build14393-breaks/d034ab52-5d49-4b92-976a-a1355b5a6e6d?page=2

Этот комментарий решил мою проблему.

"Ваш отзыв о" разовых "задачах отлично работает - он определенно будет достаточным для решения проблемы до тех пор, пока MS не решит проблему. Единственное преимущество" ежедневно", насколько я вижу, заключается в отсутствии произвольной даты, связанной с временем выполнения. Это может смутить других относительно того, почему задание должно начинаться с даты X. '

Настройки триггера "Einmal" означает "одноразовый" , "Sofort" означает "сразу"

Ответ 11

В моем случае (та же проблема) помогли добавить -NoProfile в аргументы команды действия задачи и установить флажок "Запустить с наивысшими привилегиями", потому что на моем сервере UAC включен (активен).

Подробнее об этом введите ссылку здесь

Ответ 12

после многого времени...

планировщик задач: powershell.exe -noexit и. \your_script.ps1

обязательно разместите script в этой папке: windows\system32

Удачи!