1

Я пытаюсь запустить простой скрипт PowerShell PS1 из планировщика задач. Параметры действий задачи: Program: powershell и Add arguments: -executionpolicy bypass -file C:\Users\Robin\Documents\script.PS1 .

Объективный сценарий.PS1 доступен нормально, но есть строка внутри него (вызов другого скрипта: Rscript Z:\rscript.R) не удается с сообщением:

Fatal error: cannot open file Rscript Z:\rscript.R
'rscript.R': no such file or directory

Если я запускаю ту же строку вручную в Powershell, она работает нормально. Кроме того, в качестве команды «Выполнить» прекрасно работает следующее: powershell -executionpolicy bypass -file C:\Users\Robin\Documents\script.PS1 , которая предполагает, что проблема в планировщике задач. Задача настроена на выполнение с самыми высокими привилегиями. Я в тупике.

Очень благодарен за помощь.

5 ответов5

2

Я предполагаю, что Z: это сетевой диск.

Запланированные задания (обычно) выполняются под системной учетной записью. Сетевые диски обычно не отображаются для системы. Даже если вы измените его для запуска под своими учетными данными (или какими-либо конкретными учетными данными пользователя), вы просто не сможете рассчитывать на доступность сетевых ресурсов. Вам нужно будет либо:

  1. Запустите второй сценарий, используя путь UNC (и убедитесь, что системная учетная запись имеет доступ к пути UNC)
  2. Сначала подключите сетевой диск в своем скрипте (в PowerShell 3 вы могли бы использовать New-PSDrive, но), самый простой способ - запустить команду NET USE Z: \\SERVER\SHARE . Конечно, вам может потребоваться добавить учетные данные пользователя: password /USER:domain\user и вы также можете попробовать добавить /SAVECRED /PERSISTENT:YES и запустить эту команду один раз и надеяться, что она останется прежней (но я все равно оставлю test-path и remap это если это вариант).
  3. Самый безопасный вариант: сделать копию файла локально.
1

Пожалуйста, проверьте это из stackoverflow, похоже, довольно похожий случай:Как я могу убедить powershell (запустить через планировщик задач) найти мой сетевой диск?

0

Кажется, что Task Scheduler не может правильно управлять проверкой пользователей домена ... При попытке выполнить скрипт вручную пользователь идентифицируется как «user@domain.com». При попытке выполнить его с помощью планировщика задач (только в автономном режиме) пользователь идентифицируется как «user @» без домена. Таким образом, в случае, если скрипт пытается скопировать или выполнить какие-либо сетевые операции, требующие валидации пользователя, таких файлов нет, или нет ошибок допустимого пути и т.д.

0

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

Несколько вещей, чтобы иметь в виду и убедиться в:

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

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

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

Команда, которую вы пробовали из командного файла, была неверной.

Попробуйте эту команду, и не забудьте сохранить цитаты.

powershell.exe -file ". 'C:\Users\Robin\Documents\script.ps1'" 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .