Сценарий PowerShell для Windows Server 2008 R2 запускается вручную, но не как запланированная задача.
У меня есть сценарий PowerShell, который запускается вручную с помощью PowerShell ISE. Однако при запуске в качестве запланированной задачи с использованием учетных данных администратора задача не выполняется с ожидаемыми результатами.
Сценарий:
$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")
Пользователь-администратор имеет полный контроль над сценарием и папкой, в которую он пишет. URL существует и отвечает в течение разумного времени (менее одной секунды).
Если я запускаю задачу вручную, статус будет 0x41301 ("В данный момент выполняется"), пока я в итоге не закончу ее. Я поставил задачу, используя оба этих метода:
- Запустить программу:
C:\path\to\PS.PS1
- Запустить программу:
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
Хотя вы, возможно, уже нашли решение своей проблемы, я все же собираюсь опубликовать эту заметку, чтобы помочь кому-то еще. Я столкнулся с аналогичной проблемой. Я в основном использовал другую учетную запись домена для тестирования и сравнения. Задача выполнялась просто отлично с пометкой "Запустить, вошел пользователь или нет".
Несколько вещей, чтобы иметь в виду и убедиться в:
- Учетная запись, используемая для выполнения задачи, должна иметь права "Вход в систему как пакетное задание" в соответствии с локальной политикой безопасности сервера (или быть членом локальной группы администраторов). Вы должны указать учетную запись, необходимую для запуска скриптов / файлов bat.
- Убедитесь, что вы вводите правильные символы пароля
- Задачи в 2008 R2 не запускаются в интерактивном режиме, особенно если вы запускаете их как "Запускать, вошел ли пользователь в систему или нет". Это, скорее всего, приведет к ошибке, особенно если в скрипте вы ищете какие-либо объекты \ ресурсы, специфичные для профиля пользователя, когда задача была создана, так как сеанс powershell потребует эту информацию для запуска, в противном случае она начнется и сразу же закончится. В качестве примера для определения $Path при запуске скрипта как "Запускать, вошел ли пользователь в систему или нет", и я указываю подключенный диск. Он будет искать этот диск при запуске задачи, но поскольку учетная запись пользователя, проверенная для запуска задачи, не зарегистрирована, и в сценарии вы ссылаетесь на источник \ объект, с которым он должен работать, нет задачи будет просто прекратить. подключенный диск (\ сервер \ общий ресурс) x:\ vs. фактический UNC-путь \ сервер \ общий ресурс
- Просмотрите ваши шаги, сценарий, аргументы. Иногда самая маленькая часть может иметь большое значение, даже если вы делали этот процесс много раз. Я несколько раз пропускал символ при вводе пароля или точку с запятой, иногда при создании скрипта или задачи.
Проверьте предоставленную ссылку, и мы надеемся, что вы или кто-то еще можете воспользоваться этой информацией. Быть в безопасности.
https://technet.microsoft.com/en-us/library/cc722152.aspx