Почему задание планировщика заданий не может получить доступ к подключенному сетевому диску?


27

У меня есть задание планировщика заданий для запуска 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.

В вашем локальном или сетевом пути есть пробелы? Если так, вы инкапсулируете путь с двойными кавычками в начале и конце пути?
вс

@SunWKim Нет пробелов в любом пути.
Крейг W

Какую командную строку вы используете для выполнения резервного копирования из локальной сети? Какую сетевую папку вы резервируете? Мне кажется, что, возможно, сетевой ресурс недоступен (не подключен) при выполнении команды резервного копирования.
вс

Работает ли он как ваш пользователь или просто как администратор? Если это ваш пользователь, постоянно ли отображается диск для вашего пользователя?
Ник

@SunWKim Да, диск подключен после сопоставления. Локальный администратор не имеет прав на общий сетевой ресурс, поэтому мне нужно сопоставить его как другого пользователя перед запуском Robocopy.
Крейг W

Ответы:


17

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


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

Я знаю, что это очень поздно для игры, но вы пытались разделить свою работу на 2 запланированные задачи, одну для общего сетевого ресурса с учетными данными домена, а затем другую, выполняющую роль локального администратора с доступом к подключенному диску? Вы просто должны были бы ошеломить их или использовать мьютекс файла или что-то, чтобы убедиться, что они идут в порядке.
Дэн Чарпстер

7

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


Это было для меня. Имеет смысл.
Том Хоус

4

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

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

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

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

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

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

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

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

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

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


1

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


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
В первый раз я помог кому-то по переполнению стека, рад, что смог помочь. Также используйте «echo Get-Date» вместо того, что я имел раньше.
Райан МакГрат

Мне не нужно было вести журнал, поэтому я просто добавил cmd /c net useзапись о работе до записи о копировании в задачу, и это решило мою проблему. Ваш пост был первым после четырех часов, в котором были предложены зеркальные учетные записи, которые давали простое решение. Продолжайте хорошую работу!
Чаллака

Вы все еще поддерживаете пути UNC с помощью этого сценария, чтобы вы знали. Просто потому, что вы присваиваете букву диска пути UNC, а затем ссылаетесь на эту букву диска, вам все равно придется поддерживать \\ServerName\ShareNameлогику такого рода. Кроме того, это не обязательно должен быть PowerShell, поскольку он также NET USEзапускается через пакет, и что касается планирования с помощью Task Scheduler и учетной записи SYSTEM, вы можете делать это независимо от того, какой тип сценария, логики и т. Д. Вы планируете запускать с помощью Task. Планировщик.
Сок Pimp IT

Кроме того, просто чтобы уточнить, обратите внимание, что вы также можете использовать NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>именно это и не нужно указывать букву диска вообще, если требуется только аутентификация для общего ресурса, а не фактическая буква диска.
Сок Pimp IT

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.


Добро пожаловать в Супер пользователя! Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос. OP не упоминает об использовании Cygwin или bash.
DavidPostill

0

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

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

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


0

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


0

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


-2

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

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


Это не отвечает на вопрос автора. Пожалуйста, не оставляйте комментарии как ответы.
Ramhound

Пожалуйста, не добавляйте «спасибо» как ответы. Потратьте некоторое время на сайт, и вы получите достаточные привилегии, чтобы выслушать ответы, которые вам нравятся, что является суперпользователем, чтобы сказать спасибо.
DavidPostill
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.