Чому завдання планувальника завдань не можуть отримати доступ до картографічного мережевого накопичувача?


27

У мене є завдання планувальника завдань запустити Robocopy для резервного копіювання локальних файлів на загальнодоступну мережу. Мені потрібно використовувати облікові дані домену для доступу до спільної мережі, але локальний комп'ютер не в домені, і завдання виконується як локальний адміністратор. Це рішеннятимчасового відображення та скасування карти спільної роботи в мережі, але він залишає мій пароль відкритим текстом для всіх, хто дивиться на завдання планувальника завдань. Я вважаю за краще відображати мережевий накопичувач зазвичай на напівпостійній основі, тому завдання планувальника завдань просто має запустити Robocopy і посилатися на відповідний лист диска. Однак я завжди отримую помилку "Система не може знайти вказаний шлях." в журналі журналу Robocopy при запуску цього програми із планувальника завдань, навіть незважаючи на те, що команда працює добре з підвищеного командного рядка (завдання встановлено для запуску з найвищими правами). Також зауважте, що я зробив цю настройку реєстру, щоб отримати доступ до відображених дисків із підвищеної командної лінії.

EDIT: Щоб уточнити, увійшов як локальний адміністратор, я запускаю Провідник Windows як адміністратор. Я відображаю мережеву частку на букву 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 Немає пробілів в жодному шляху.
Крейг Ш

який командний рядок ви використовуєте для виконання резервного копіювання з локальної в мережу? Яку мережну частку ви створюєте резервну копію? Змушує мене думати, можливо, спільна мережа доступна (не підключена) під час виконання команди резервного копіювання.
Нд

Він працює як ваш користувач чи просто "адміністратор". Якщо це ваш користувач, чи наполегливо відображається диск для вашого користувача?
Нік

@SunWKim Так, накопичувач підключається після відображення. Місцевий адміністратор не має прав на загальну мережу, тому я маю відображати його як іншого користувача перед тим, як запустити Robocopy.
Craig W

Відповіді:


17

Картовані накопичувачі є концепцією інтерфейсу користувача та не доступні для таких фонових завдань. Отримайте доступ до цілі через UNC та переконайтесь, що користувач, у якого виконується завдання, має доступ до цілі.


Неможливо. Комп'ютер не в домені, тому я повинен виконувати завдання як недоменний користувач, але лише користувачі домену мають доступ до загальної мережі.
Craig W

Я знаю, що це дуже пізно в грі, але ви спробували розділити свою роботу на 2 заплановані завдання: одне для мережевої спільної роботи з обліковими записами домену, а потім інше, яке працює як локальний адміністратор з доступом до картографічного диска? Вам просто доведеться їх розмістити або використовувати файлову файлу або щось, щоб переконатися, що вони йдуть у порядку.
Dan Csharpster

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 підтримує їх. тобто роботокопія c: \ temp \\ сервер \ share \ temp

Або ще краще, запустіть резервну копію на самому сервері. Створіть обліковий запис адміністратора домену просто для процесу резервного копіювання. Подайте роботокопіюючи пароль із текстового файлу, до якого можуть отримати доступ лише адміністратори домену.

Роки тому я створив кілька .cmd-скриптів, які б резервно створювали резервні копії необхідних файлів для кожної системи в мережі. Єдиною зовнішньою програмою, яку я використав, була команда Grep Cgywin та відправник команди smtp пошти.

Я зробив один сценарій, який би відсканував мережу для систем. Це створить текстовий файл усіх імен системи та попередить мене електронною поштою про будь-які нові системи, які він знайшов. (У мене був файл конфігурації, який би розібрався для пропуску систем.) Кожна нова система мала створений для неї каталог резервного копіювання та розміщений в ньому файл конфігурації резервного копіювання. Користувач може змінити цей файл та перелічити всі каталоги, які потребували резервного копіювання. Вони також могли вказати час для їх резервного копіювання, щоб цього не сталося, коли вони були в офісі. Я запускав цей скрипт на сервері кожні 5 хвилин, оскільки це не забирало часу на обробку, і мені подобається функція безпеки, щоб сповіщати мене, коли в мережу була підключена нова система.

Інший скрипт проаналізував би всі окремі файли конфігурації резервного копіювання і запланував завдання запустити резервну копію в цій системі. Це було щодня о 12:01.

Нарешті, скрипт резервного копіювання проаналізував би конфігураційний файл, який йому передав планувальник, і за допомогою роботокопії скопіював би всі файли. Я перевіряв конфігураційні файли повної помилки, оскільки користувачі редагували їх, і я отримував електронні листи про будь-які проблеми.

Користувачі могли читати свої резервні файли, але не могли видалити резервну копію. Це забезпечило певний захист від збитків від можливого незадоволеного працівника.

Можливо, щось набагато більш елегантне могло бути зроблено в .vbs або powerhell, але я не дуже програміст. Мої класи програмування включали 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

Створення цього сценарію повноважень, планування завдання як SYSTEM та встановлення його на запуск при перезавантаженні дозволило мені використовувати літери диска у своїх скриптах, оскільки UNC не є можливим через головний біль інших проблем.


Це вирішило для мене проблему! маючи цю команду для входу з аутентифікацією для виконання, перш ніж сценарій творив чудеса! Це вирішує головний біль від необхідності "відображати дзеркальні облікові записи користувачів" чимось надійним.
Цхаллачка

1
Перший раз, коли я допомагав комусь із переповненням стека, радий, що можу допомогти. Також використовуйте "Echo Get-Date" замість того, що я мав раніше.
Райан МакГрат

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

Ви все ще підтримуєте контури UNC за допомогою цього сценарію, щоб ви знали. Тільки тому, що ви призначаєте літеру диска шляху до UNC, а потім посилаєтесь на цю букву диска, вам все одно потрібно підтримувати \\ServerName\ShareNameцю логіку. Крім того, це не обов'язково має бути PowerShell, оскільки він NET USEпрацює і через пакетний пакет, і що стосується планування програми планування завдань як облікового запису SYSTEM, ви можете це робити незалежно від типу скрипту, логіки тощо. Планувальник.
Pimp Juice IT

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

0

Спробуйте змінити місце "start in" на "c: \". Це, здавалося, вирішило це для мене, тому, можливо, система перешкоджала виконанню cmd.exe із за замовчуванням \ windows \ system32 \ як функцію захисту.


0

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

Я вирішив за допомогою //server/share/xxxfilename.txt
Будь ласка, зверніть увагу на задню косу рису, перетворену на косу рису вперед.
Тепер мій скрипт bash cygwin працює у планувальнику завдань Windows та оболонці cygwin.
Примітка: Команда " net use " може отримати доступ до дисководів карт у оболонці, але показує Недоступне R: коли я запускаю цю команду в Планувальнику завдань Windows.


Ласкаво просимо до Супер Користувача! Будь ласка, прочитайте запитання ще раз уважно. Ваша відповідь не відповідає на початкове запитання. OP не згадує використання Cygwin або bash.
DavidPostill

0

Як зауважив інший користувач, налаштування параметра "Запустити, чи користувач увійшов чи ні" на "Запустити лише тоді, коли користувач увійшов", здається, працює. Тоді ви можете використовувати або відображений шлях (наприклад, Z :) або шлях до сервера (наприклад, \\ ServerName \ Path).

Звичайно, якщо ви користуєтеся цією опцією, тоді вам потрібно зробити так, як це говорить, і переконатися, що ви ввійшли на сервер як користувач з доступом до відповідного диска. Пам’ятаю, я був у старшій компанії з таким числом робочих місць. Одного разу хтось "вийшов" з основного сервера завдань, не сподіваючись, що це матиме будь-який вплив, оскільки вони жодним чином не вимикають машину ...

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


0

Також зауважте, що якщо ви зробите відображення в скрипті, а пароль містить%, він повинен бути записаний %%, щоб сценарій працював із планувальників завдань, але% працював з командного проміжку


0

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


-2

Дякую, я думаю, що за допомогою "start in c: \" вирішена моя проблема, я буду відстежувати цю проблему, щоб підтвердити, що вирішено.

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


Це не відповідає на запитання автора. Не пишіть коментарі як відповіді.
Рамхаунд

Будь ласка, не додайте "дякую" як відповіді. Вкладіть деякий час у сайт, і ви отримаєте достатньо привілеїв, щоб одержати відповіді, які вам подобаються, а це спосіб Super User сказати спасибі.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.