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

У меня есть сценарий 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 так как это не подписанный скрипт.

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

4 ответа

Поскольку вы запускаете файл скрипта вместо блока скрипта, параметр, который вы должны использовать - -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 при запуске скрипта как "Запускать, вошел ли пользователь в систему или нет", и я указываю подключенный диск. Он будет искать этот диск при запуске задачи, но поскольку учетная запись пользователя, проверенная для запуска задачи, не зарегистрирована, и в сценарии вы ссылаетесь на источник \ объект, с которым он должен работать, нет задачи будет просто прекратить. подключенный диск (\ сервер \ общий ресурс) x:\ vs. фактический UNC-путь \ сервер \ общий ресурс
  4. Просмотрите ваши шаги, сценарий, аргументы. Иногда самая маленькая часть может иметь большое значение, даже если вы делали этот процесс много раз. Я несколько раз пропускал символ при вводе пароля или точку с запятой, иногда при создании скрипта или задачи.

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

https://technet.microsoft.com/en-us/library/cc722152.aspx
Другие вопросы по тегам