Dlaczego zadanie Harmonogramu zadań nie może uzyskać dostępu do zmapowanego dysku sieciowego?

27

Mam zadanie Harmonogramu zadań, aby uruchomić Robocopy do tworzenia kopii zapasowych plików lokalnych w udziale sieciowym. Muszę użyć poświadczeń domeny, aby uzyskać dostęp do udziału sieciowego, ale komputer lokalny nie znajduje się w domenie, a zadanie jest uruchamiane jako lokalny administrator. To rozwiązanietymczasowego mapowania i usuwania mapowania udziału sieciowego działa, ale pozostawia moje hasło jawnym tekstem dla każdego, kto patrzy na działania zadania Harmonogramu zadań. Wolę mapować dysk sieciowy normalnie na półtrwały, więc zadanie Harmonogramu zadań musi po prostu uruchomić Robocopy i odwołać się do odpowiedniej litery dysku. Zawsze jednak pojawia się błąd „System nie może znaleźć określonej ścieżki”. w dzienniku Robocopy podczas uruchamiania z Harmonogramu zadań, nawet jeśli polecenie działa poprawnie z poziomu wiersza polecenia z podwyższonym poziomem uprawnień (zadanie jest ustawione na najwyższe uprawnienia). Zauważ też, że zrobiłem to ulepszenie rejestru, aby uzyskać dostęp do mapowanych dysków z wiersza polecenia z podwyższonym poziomem uprawnień.

EDYCJA: Aby to wyjaśnić, zalogowany jako lokalny administrator, uruchamiam Eksploratora Windows jako administrator. Mapuję udział sieciowy na literę dysku Y. Uruchamiam wiersz polecenia jako administrator i uruchamiam

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

Działa w porządku. Tworzę zadanie Harmonogram zadań, aby uruchomić dokładnie to samo polecenie, niezależnie od tego, czy użytkownik jest zalogowany, czy nie, z najwyższymi uprawnieniami. Uruchamiam go i pojawia się błąd. Piszę do dziennika i dostaję

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

śledzony przez

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.
Craig W.
źródło
Czy na Twojej ścieżce lokalnej lub ścieżce sieciowej są spacje? Jeśli tak, czy otaczasz ścieżkę podwójnymi cudzysłowami na początku i na końcu ścieżki?
niedz.
@SunWKim Brak spacji w obu ścieżkach.
Craig W
jakiego wiersza poleceń używasz do wykonania kopii zapasowej z sieci lokalnej do sieci? Na jakim udziale sieciowym tworzysz kopię zapasową? Sprawia, że ​​myślę, że być może udział sieciowy jest niedostępny (niepołączony) podczas wykonywania polecenia tworzenia kopii zapasowej.
niedz.
Czy działa jako użytkownik, czy tylko jako „administrator”. Jeśli to Twój użytkownik, czy dysk jest stale mapowany dla tego użytkownika?
Nick
@SunWKim Tak, napęd jest podłączony po mapowaniu. Lokalny administrator nie ma uprawnień do udziału sieciowego, dlatego muszę go zmapować jako innego użytkownika przed uruchomieniem Robocopy.
Craig W

Odpowiedzi:

17

Zmapowane dyski są koncepcją interfejsu użytkownika i nie są dostępne dla takich zadań w tle. Uzyskaj dostęp do celu za pośrednictwem UNC i upewnij się, że użytkownik uruchamiający zadanie jako ma dostęp do celu.

Jacek
źródło
Niemożliwe. Komputer nie znajduje się w domenie, więc muszę uruchomić zadanie jako użytkownik spoza domeny, ale tylko użytkownicy domeny mają dostęp do udziału sieciowego.
Craig W
Wiem, że jest już bardzo późno w grze, ale czy próbowałeś podzielić swoją pracę na 2 zaplanowane zadania, jedno dla udziału sieciowego z poświadczeniami domeny, a drugie jako lokalny administrator z dostępem do zmapowanego dysku? Będziesz musiał po prostu je rozłożyć lub użyć muteksu plików lub czegoś, aby upewnić się, że idą w porządku.
Dan Csharpster
7

W moim przypadku wszystko, co musiałem zrobić, to odznaczyć run with highest privilegesflagę, ale uruchamiam zadanie na tym samym użytkowniku, co użytkownik, który zamapował dysk.

Piotr
źródło
To było dla mnie. Ma sens.
Tom Haws,
1

Inną opcją jest użycie pełnej ścieżki sieci, ponieważ Robocopy je obsługuje. tzn. robocopy c: \ temp \\ server \ share \ temp

Lub jeszcze lepiej, uruchom kopię zapasową na samym serwerze. Utwórz konto administratora domeny tylko na potrzeby procesu tworzenia kopii zapasowej. Feed robocopy hasło z pliku tekstowego, do którego dostęp mają tylko administratorzy domeny.

Wiele lat temu stworzyłem kilka skryptów .cmd, które w ten sposób tworzyłyby kopie zapasowe niezbędnych plików dla każdego systemu w sieci. Jedynym zewnętrznym programem, którego użyłem, było polecenie Greg Cgywin i wiersz polecenia nadawcy poczty smtp.

Zrobiłem jeden skrypt, który skanowałby sieć w poszukiwaniu systemów. Utworzy plik tekstowy ze wszystkimi nazwami systemów i powiadomi mnie pocztą elektroniczną o wszelkich nowych znalezionych systemach. (Miałem plik konfiguracyjny, który analizowałby pod kątem pomijania systemów). Każdy nowy system miał utworzony dla niego katalog kopii zapasowej i umieszczony w nim plik konfiguracji kopii zapasowej. Użytkownik może zmodyfikować ten plik i wyświetlić listę katalogów, których kopie zapasowe wymagają wykonania. Mogli również określić czas wykonywania kopii zapasowych, aby nie miało to miejsca, gdy byli w biurze. Uruchomiłem ten skrypt na serwerze co 5 minut, ponieważ nie wymagał on czasu przetwarzania i podoba mi się funkcja bezpieczeństwa polegająca na powiadamianiu mnie o podłączeniu nowego systemu do sieci.

Inny skrypt przeanalizuje wszystkie pliki konfiguracji kopii zapasowej i zaplanuje zadanie uruchomienia kopii zapasowej w tym systemie. To było uruchamiane codziennie o 00:01.

Na koniec skrypt kopii zapasowej przeanalizuje plik konfiguracyjny, który został do niego przekazany przez program planujący, a użycie robocopy spowoduje skopiowanie wszystkich plików. Miałem pełne sprawdzanie błędów w plikach konfiguracyjnych, ponieważ użytkownicy je edytowali i dostawałem e-maile o wszelkich problemach.

Użytkownicy mogli odczytać swoje pliki kopii zapasowej, ale nie mogli usunąć kopii zapasowej. Zapewniło to pewną ochronę przed szkodami ze strony potencjalnie niezadowolonego pracownika.

Prawdopodobnie coś o wiele bardziej eleganckiego mogło zostać wykonane w .vbs lub PowerShell, ale tak naprawdę nie jestem programistą. Moje zajęcia z programowania obejmowały Cobal i JCL. Pamiętam, że skopiowałem skrypty, kiedy wyszedłem, ale kto wie, gdzie są teraz.

Kevin
źródło
1

Rozwiązałem problem, zmieniając opcję „Uruchom bez względu na to, czy użytkownik jest zalogowany” na „Uruchom tylko wtedy, gdy użytkownik jest zalogowany”. Wypróbuj to, może ci pomóc.

użytkownik731960
źródło
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

Utworzenie tego skryptu PowerShell, zaplanowanie zadania jako SYSTEM i ustawienie go do uruchomienia przy ponownym uruchomieniu pozwoliło mi używać liter napędów w moich skryptach, ponieważ UNC nie jest opcją z powodu problemów z innymi problemami.

Ryan McGrath
źródło
To naprawiło problem dla mnie! mając tę ​​komendę, aby zalogować się przy użyciu uwierzytelnienia, aby wykonać, zanim skrypt zrobił cuda! To rozwiązuje problem związany z „dublowaniem kont użytkowników” za pomocą czegoś solidnego.
Tschallacka
1
Po raz pierwszy pomogłem komuś na przepełnieniu stosu, cieszę się, że mogłem pomóc. Ponadto użyj „echo Get-Date” zamiast tego, co miałem wcześniej.
Ryan McGrath
Nie potrzebowałem rejestrowania, więc właśnie dodałem pozycję cmd /c net usezadania przed pozycją zadania kopiowania w zadaniu i to rozwiązało mój problem. Twój post był pierwszym po czterech godzinach napotkania sugerowanych kont lustrzanych, które stanowiły łatwe rozwiązanie. Tak trzymaj!
Tschallacka
Nadal utrzymujesz ścieżki UNC za pomocą tego skryptu, więc wiesz. Tylko dlatego, że przypisujesz literę dysku do ścieżki UNC, a następnie odwołujesz się do tej litery dysku, nadal musisz zachować \\ServerName\ShareNametaką logikę. Ponadto niekoniecznie musi to być PowerShell, ponieważ NET USEdziała również wsadowo, a także jeśli chodzi o planowanie za pomocą Harmonogramu zadań jako konta SYSTEM, możesz to zrobić niezależnie od rodzaju skryptu, logiki itp., Które planujesz uruchomić za pomocą Zadania Planista.
Pimp Juice IT
Ponadto, aby to wyjaśnić, pamiętaj, że możesz również użyć NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>takiego sposobu i nie musisz w ogóle określać litery dysku, jeśli potrzebne jest samo uwierzytelnienie udziału, a nie faktyczna litera dysku.
Pimp Juice IT
0

Spróbuj zmienić lokalizację „start w” na „c: \”. Wydawało mi się, że to naprawiło to dla mnie, więc może system uniemożliwiał uruchomienie cmd.exe z domyślnego \ windows \ system32 \ jako funkcji bezpieczeństwa.

użytkownik364486
źródło
0

Miałem ten sam problem podczas próby uzyskania dostępu do pliku r: /xxxfilename.txt za pomocą dysku zamapowanego w systemie Windows r: \ server \ share podczas wywoływania skryptu z harmonogramu zadań systemu Windows.

Rozwiązałem za pomocą //server/share/xxxfilename.txt
Zwróć uwagę, że ukośnik odwrócony został przekształcony na ukośnik.
Teraz mój skrypt bash cygwin działa w harmonogramie zadań Windows i powłoce cygwin.
Uwaga: polecenienet use ” może uzyskiwać dostęp do mapowanych dysków w powłoce, ale pokazuje Niedostępne R: kiedy uruchamiam to polecenie w Harmonogramie zadań Windows.

ijimenez123
źródło
Witamy w Super User! Przeczytaj uważnie pytanie ponownie. Twoja odpowiedź nie odpowiada na pierwotne pytanie. OP nie wspomina o używaniu Cygwin ani bash.
DavidPostill
0

Jak zauważył inny użytkownik, ustawienie opcji „Uruchom bez względu na to, czy użytkownik jest zalogowany” na „Uruchom tylko wtedy, gdy użytkownik jest zalogowany” wydaje się działać. Następnie możesz użyć zmapowanej ścieżki (np. Z :) lub ścieżki serwera (np. \\ NazwaSerwera \ Ścieżka).

Oczywiście, jeśli użyjesz tej opcji, musisz postępować zgodnie z instrukcją i upewnić się, że zalogowałeś się na serwerze jako użytkownik z dostępem do odpowiedniego dysku. Pamiętam, że byłem w starszej firmie z wieloma takimi zadaniami. Pewnego dnia ktoś „wylogował się” z głównego serwera zleceń, nie spodziewając się, że będzie to miało jakikolwiek wpływ, ponieważ w żaden sposób nie wyłączało urządzenia…

Ponadto w dzisiejszych czasach system Windows lubi przeprowadzać wiele samodzielnie uruchamianych restartów systemu. Dlatego skorzystaj z tego rozwiązania na własne ryzyko.

Chris Matthews
źródło
0

Zauważ również, że jeśli wykonasz mapowanie w skrypcie, a hasło zawiera%, to musisz napisać %%, aby skrypt działał z harmonogramu zadań, ale% do pracy z wiersza polecenia

Tom Arleth
źródło
0

można użyć następujących poleceń, które zostaną dodane do samego skryptu wsadowego, aby uruchomić skrypt wsadowy z zadania harmonogramu Windows, aby uzyskać katalog, plik skopiowany do systemu lokalnego za pomocą zadania harmonogramu Windows; wykorzystanie netto T: „\\ xxx \ xxx \ xxx cd / d Y: użytkownik netto / d T: / Y

AshishS1
źródło
-2

Dzięki, myślę, że użycie „start in c: \” rozwiązało mój problem, będę śledzić ten problem, aby potwierdzić, że problem został rozwiązany.

Miałem ten sam problem, jeśli kliknąłem bezpośrednio na partię, działała bezbłędnie, ale nie zgodnie z zaplanowanym zadaniem.

użytkownik3062834
źródło
To nie odpowiada na pytanie autora. Nie zostawiaj komentarzy jako odpowiedzi.
Ramhound 21.04.2016
Nie dodawaj „dziękuję” jako odpowiedzi. Zainwestuj trochę czasu na stronie, a zdobędziesz wystarczające uprawnienia do głosowania na odpowiedzi, które Ci się podobają, co jest sposobem Super Użytkownik na podziękowanie.
DavidPostill