25

У меня есть задание планировщика заданий для запуска Robocopy для резервного копирования локальных файлов на сетевой ресурс. Я должен использовать учетные данные домена для доступа к общему сетевому ресурсу, но локальный компьютер не входит в домен, а задание запускается от имени локального администратора. Это решение для временного сопоставления и отмены сопоставления общего сетевого ресурса работает, но оно оставляет мой пароль открытым для всех, кто смотрит на действия задания планировщика заданий. Я бы предпочел, чтобы сетевой диск обычно отображался на полупостоянной основе, поэтому заданию планировщика заданий просто нужно запустить Robocopy и обратиться к соответствующей букве диска. Однако я всегда получаю сообщение об ошибке «Система не может найти указанный путь». в журнале Robocopy при запуске из планировщика задач, даже если команда работает нормально из командной строки с повышенными правами (задание настроено на выполнение с самыми высокими привилегиями). Также обратите внимание, что я сделал эту настройку реестра для доступа к подключенным дискам из командной строки с повышенными привилегиями.

РЕДАКТИРОВАТЬ: Чтобы уточнить, вошел в систему как локальный администратор, я запускаю Windows Explorer как администратор. Я сопоставляю сетевой ресурс с буквой Y. Я запускаю командную строку от имени администратора и запускаю

C:\Windows\System32\Robocopy.exe C:\temp Y:\temp

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

ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.

с последующим

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.

12 ответов12

16

Сопоставленные диски являются концепцией пользовательского интерфейса и недоступны для таких фоновых задач. Получите доступ к цели через UNC и убедитесь, что у пользователя, выполняющего задачу, есть доступ к цели.

6

В моем случае все, что мне нужно было сделать, это снять флажок run with highest privileges но я запускаю задачу на том же пользователе, что и пользователь, который подключил диск.

3

Попробуйте использовать:

pushd \\machine\share

в пакетном файле вашей запланированной задачи. Сетевые общие диски доступны только из пользовательской среды. "pushd" позволит запустить его в контексте скрипта.

Когда вы закончите использовать:

popd \\machine\share

разархивировать диск.

Ссылка: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html

1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

Создание этого сценария powershell, планирование задания как SYSTEM и настройка его запуска при перезагрузке позволили мне использовать буквы дисков в моих сценариях, поскольку UNC не подходит из-за головной боли из-за других проблем.

1

Другой вариант - просто использовать полный сетевой путь, поскольку Robocopy их поддерживает. то есть robocopy c:\temp \\server \share \temp

Или, что еще лучше, запустите резервное копирование на самом сервере. Создайте учетную запись администратора домена только для процесса резервного копирования. Feed robocopy пароль из текстового файла, к которому имеют доступ только администраторы домена.

Несколько лет назад я создал несколько сценариев .cmd, которые бы таким образом создавали резервные копии важных файлов для каждой системы в сети. Единственной внешней программой, которую я использовал, была команда Ggy от Cgywin и командная строка smtp отправителя почты.

Я сделал один скрипт, который сканировал бы сеть на наличие систем. Он создаст текстовый файл со всеми именами систем и сообщит мне по электронной почте о любых новых обнаруженных системах. (У меня был файл конфигурации, который он будет анализировать для систем, чтобы пропустить.) Для каждой новой системы был создан каталог резервных копий и файл конфигурации резервных копий. Пользователь может изменить этот файл и перечислить любые каталоги, для которых необходимо создать резервную копию. Они также могли указать время для своих резервных копий, чтобы этого не случилось, когда они были в офисе. Я запускал этот скрипт на сервере каждые 5 минут, так как он не занимал время обработки, и мне нравится функция безопасности, предупреждающая меня о подключении новой системы к сети.

Другой сценарий будет анализировать все отдельные файлы конфигурации резервного копирования и планировать задачу для запуска резервного копирования в этой системе. Это было запущено ежедневно в 0:01 утра.

Наконец, скрипт резервного копирования проанализирует файл конфигурации, который был передан ему планировщиком, и с помощью robocopy скопирует все файлы. У меня была полная проверка ошибок в файлах конфигурации, так как пользователи редактировали их, и я получал электронные письма о любых проблемах.

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

Возможно, что-то гораздо более элегантное можно было бы сделать в .vbs или powershell, но я не совсем программист. Мои классы программирования включали в себя Cobal и JCL. Я помню, что я скопировал сценарии, когда ушел, но кто знает, где они сейчас.

0

Я преодолел проблему, изменив параметр «Запускать, вошел ли пользователь в систему или нет» на "Запускать только после входа в систему". Попробуйте это может помочь вам.

0

Как заметил другой пользователь, установка опции «Запускать независимо от того, вошел пользователь в систему или нет» на "Запускать только когда пользователь вошел в систему", похоже, работает. Затем вы можете использовать либо сопоставленный путь (например, Z:), либо путь к серверу (например, \\ServerName \Path).

Конечно, если вы используете эту опцию, то вы должны сделать, как она говорит, и убедиться, что вы вошли на сервер как пользователь с доступом к соответствующему диску. Я помню, как работал в более старой компании с множеством рабочих мест, подобных этой. Однажды кто-то "отключился" от основного сервера заданий, не ожидая, что это окажет какое-либо влияние, так как они никак не выключали машину ...

Кроме того, в наши дни Windows любит много перезагружать систему самостоятельно. Так что используйте это решение на свой страх и риск.

0

Можно использовать следующие команды, которые будут добавлены в сам пакетный скрипт, чтобы запустить пакетный скрипт из задачи расписания Windows, чтобы получить каталог, файл скопирован в локальную систему с помощью задачи расписания Windows; net use Y: "\\xxx\xxx\xxx cd /d Y: чистый пользователь /d Y: /Y

0

Также обратите внимание, что если вы выполняете сопоставление в сценарии, а пароль содержит%, то для сценария должно быть написано %% для работы сценария из планировщика заданий, а% для работы из команды commandprompt

0

Попробуйте изменить местоположение "начало в" на «c:\». Это, кажется, исправило это для меня, поэтому, возможно, система препятствовала выполнению cmd.exe из файла \windows \system32 \ по умолчанию в качестве функции безопасности.

0

У меня была такая же проблема при попытке доступа к r:/xxxfilename.txt с подключенного к Windows диска r:\server\share при вызове сценария из планировщика задач Windows.

Я решил использовать //server/share/xxxfilename.txt
Обратите внимание на обратную косую черту, преобразованную в прямую косую черту.
Теперь мой скрипт bash cygwin работает в планировщике задач Windows и оболочке cygwin.
Примечание: команда « net use » может получить доступ к карте накопителей в оболочке, но показывает Unavailable R: когда я запускаю эту команду в планировщике задач Windows.

-2

Спасибо, я думаю, что с помощью «запуска в c:\» решена моя проблема, я буду отслеживать эту проблему, чтобы подтвердить, решена.

У меня возникла та же проблема, если я нажимал непосредственно на пакет, он работал без сбоев, но не по запланированному заданию.

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