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

Сценарий Windows Server 2008 R2 PowerShell запускается вручную, но не по расписанию.

У меня есть сценарий PowerShell, который запускается вручную с помощью PowerShell ISE. Однако при запуске в качестве запланированной задачи с использованием учетных данных администратора задача не запускается с ожидаемыми результатами.

Сценарий:

$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")

У пользователя-администратора есть Полный контроль сценария и папки, в которую он пишет. URL-адрес существует и отвечает в разумные сроки (менее одной секунды).

Если я запускаю задачу вручную, статус будет 0x41301 («Выполняется»), пока я не завершу ее. Я поставил задачу обоими способами:

  1. Запустить программу: C:\path\to\PS.PS1
  2. Запустить программу: C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe с дополнительными опциями -noninteractive -command "C:\path\to\PS.PS1"

При использовании варианта 1 история задач показывает, что был открыт экземпляр notepad.exe, но никогда не завершает его. Используя вариант 2, он завершает задачу, но не загружает / не создает файл.

я использовал Set-ExecutionPolicy Unrestricted поскольку это не подписанный сценарий.

Как я могу исправить эту проблему?

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

Кроме того, установка политики выполнения с помощью командлета Set-ExecutionPolicy не гарантирует, что сценарий выполняется в этом контексте. Действующая политика выполнения может быть перезаписана групповой политикой (GPO). Чтобы принудительно включить это при выполнении файла, используйте параметр -ExecutionPolicy

Команда, которую вы ищете, выглядит следующим образом

powershell.exe -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File c:\path\ps.ps1

Более подробную информацию об этих параметрах можно найти Вот.

Файл сценария, который вы пытаетесь запустить, не является изначально надежным файлом. Используйте амперсанд перед путем к файлу, чтобы запустить команду:

Powershell.exe -ExecutionPolicy Unrestricted -Command { & 'C:\path\to\PS.PS1' }

Другие параметры запуска PowerShell можно найти в Справка из командной строки PowerShell.exe.

Можете ли вы подтвердить свою политику выполнения для всех областей:

Get-ExecutionPolicy -List

Если вы установите LocalMachine политика к RemoteSigned, у вас должно быть определение задачи, например:

Начинать: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0

Бегать: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoLogo -File c: \ path \ to \ ps.ps1

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

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

  1. Учетная запись, используемая для выполнения задачи, должна иметь права «Вход в систему как пакетное задание» в соответствии с локальной политикой безопасности сервера (или быть членом локальной группы администраторов). Вы должны указать учетную запись, необходимую для запуска скриптов / файлов bat.
  2. Убедитесь, что вы вводите правильный пароль.
  3. Задачи в 2008 R2 не запускаются в интерактивном режиме, особенно если вы запускаете их как «Запускать независимо от того, вошел ли пользователь в систему или нет». Это, скорее всего, потерпит неудачу, особенно если в сценарии вы ищете какие-либо объекты \ ресурсы, специфичные для профиля пользователя, когда задача была создана, поскольку сеансу PowerShell потребуется эта информация для запуска, в противном случае он запустится и немедленно завершится. В качестве примера для определения $ Path при запуске сценария как «Запускать независимо от того, вошел ли пользователь в систему или нет», я указываю подключенный диск. Он будет искать этот диск, когда задача запускается, но поскольку учетная запись пользователя, проверенная для запуска задачи, не вошла в систему, а в сценарии вы ссылаетесь на источник \ объект, с которым он должен работать, отсутствует задача просто прекратите. подключенный диск (\ server \ share) x: \ против фактического пути UNC \ server \ share
  4. Просмотрите свои шаги, сценарий, аргументы. Иногда даже самая маленькая деталь может иметь большое значение, даже если вы проделывали этот процесс много раз. Я несколько раз пропустил символ при вводе пароля или точку с запятой, иногда при создании скрипта или задачи.

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

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