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.
źródło
Odpowiedzi:
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.
źródło
W moim przypadku wszystko, co musiałem zrobić, to odznaczyć
run with highest privileges
flagę, ale uruchamiam zadanie na tym samym użytkowniku, co użytkownik, który zamapował dysk.źródło
Spróbuj użyć:
w pliku wsadowym zaplanowanego zadania. Współużytkowane dyski sieciowe są dostępne tylko w środowisku użytkownika. „pushd” pozwoli na uruchomienie go w kontekście skryptu.
Po zakończeniu użyj:
aby odmapować dysk.
Odniesienie: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html
źródło
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.
źródło
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.
źródło
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.
źródło
cmd /c net use
zadania 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!\\ServerName\ShareName
taką logikę. Ponadto niekoniecznie musi to być PowerShell, ponieważNET USE
dział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.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.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.
źródło
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: polecenie „ net 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.
źródło
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.
źródło
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
źródło
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
źródło
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.
źródło