Tại sao công việc Lập lịch tác vụ không thể truy cập vào ổ đĩa mạng được ánh xạ?


27

Tôi có một công việc Lập lịch tác vụ để chạy Robocopy để sao lưu các tệp cục bộ vào mạng chia sẻ. Tôi phải sử dụng thông tin xác thực tên miền để truy cập chia sẻ mạng nhưng máy tính cục bộ không có trên miền và công việc được điều hành như một quản trị viên cục bộ. Giải pháp nàyvề việc lập bản đồ tạm thời và hủy ánh xạ chia sẻ mạng hoạt động nhưng nó để mật khẩu của tôi hiển thị dưới dạng văn bản thuần cho bất kỳ ai nhìn vào các hành động công việc của Trình lập lịch tác vụ. Tôi muốn lập bản đồ ổ đĩa mạng bình thường trên cơ sở bán cố định để công việc Lập lịch tác vụ chỉ cần chạy Robocopy và tham khảo ký tự ổ đĩa thích hợp. Tuy nhiên tôi luôn gặp lỗi "Hệ thống không thể tìm thấy đường dẫn được chỉ định." trong nhật ký Robocopy khi chạy lệnh này từ Trình lập lịch tác vụ, mặc dù lệnh hoạt động tốt từ dấu nhắc lệnh nâng cao (công việc được đặt để chạy với các đặc quyền cao nhất). Cũng lưu ý rằng tôi đã thực hiện tinh chỉnh sổ đăng ký này để truy cập các ổ đĩa được ánh xạ từ dấu nhắc lệnh nâng cao.

EDIT: Để làm rõ, đăng nhập với tư cách quản trị viên cục bộ, tôi khởi chạy Windows Explorer với tư cách quản trị viên. Tôi ánh xạ chia sẻ mạng để lái thư Y. Tôi khởi chạy dấu nhắc lệnh với tư cách quản trị viên và chạy

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

Hoạt động tốt. Tôi tạo một công việc Lập lịch tác vụ để chạy chính xác cùng một lệnh, cho dù người dùng có đăng nhập hay không, với các đặc quyền cao nhất. Tôi chạy nó và nhận được một lỗi. Tôi viết nhật ký và nhận

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

theo dõi bởi

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

Đường dẫn cục bộ hoặc đường dẫn mạng của bạn có khoảng trắng trong chúng không? Nếu vậy, bạn có gói gọn đường dẫn bằng dấu ngoặc kép ở đầu và cuối đường dẫn không?
CN

@SunWKim Không có khoảng trắng trong cả hai đường dẫn.
Craig W

dòng lệnh bạn đang sử dụng để thực hiện sao lưu từ cục bộ sang mạng là gì? Bạn đang sao lưu loại chia sẻ mạng nào? Làm cho tôi nghĩ có lẽ chia sẻ mạng không khả dụng (không được kết nối) khi bạn thực hiện lệnh sao lưu.
CN

Là nó chạy như người dùng của bạn hay chỉ là "một quản trị viên." Nếu đó là người dùng của bạn, ổ đĩa có được ánh xạ liên tục cho người dùng của bạn không?
Nick

@SunWKim Có, ổ đĩa được kết nối sau khi ánh xạ. Quản trị viên cục bộ không có quyền đối với chia sẻ mạng, đó là lý do tại sao tôi phải ánh xạ nó như một người dùng khác trước khi chạy Robocopy.
Craig W

Câu trả lời:


17

Các ổ đĩa được ánh xạ là một khái niệm Giao diện người dùng và không có sẵn cho các tác vụ nền như thế. Truy cập mục tiêu thông qua UNC và đảm bảo rằng người dùng mà tác vụ chạy như có quyền truy cập vào mục tiêu.


Không thể. Máy tính không có trên miền nên tôi phải chạy tác vụ với tư cách là người dùng không thuộc miền nhưng chỉ người dùng miền mới có quyền truy cập vào mạng chia sẻ.
Craig W

Tôi biết trò chơi này rất muộn, nhưng bạn đã thử tách công việc của mình thành 2 nhiệm vụ theo lịch trình, một cho chia sẻ mạng với thông tin tên miền và sau đó một nhiệm vụ khác là quản trị viên cục bộ có quyền truy cập vào ổ đĩa được ánh xạ? Bạn sẽ phải sắp xếp lại chúng hoặc sử dụng một tệp mutex hoặc một cái gì đó để đảm bảo chúng đi theo thứ tự.
Dan Csharpster

7

Trong trường hợp của tôi, tất cả những gì tôi phải làm là bỏ chọn run with highest privilegescờ nhưng tôi đang chạy tác vụ trên cùng một người dùng với người dùng đã ánh xạ ổ đĩa.


Đó là nó cho tôi. Có ý nghĩa.
Tom Haws

4

Hãy thử sử dụng:

pushd \\machine\share

trong một tập tin hàng loạt của nhiệm vụ theo lịch trình của bạn. Ổ đĩa chia sẻ mạng chỉ có sẵn từ môi trường do người dùng điều hành. "Pushd" sẽ cho phép nó được chạy trong ngữ cảnh của tập lệnh.

Khi bạn sử dụng xong:

popd \\machine\share

để hủy sơ đồ ổ đĩa.

Tham khảo: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html


1

Một tùy chọn khác là chỉ sử dụng đường dẫn mạng đầy đủ, vì Robocopy hỗ trợ chúng. tức là bản sao c: \ temp \\ server \ share \ temp

Hoặc tốt hơn nữa, chạy bản sao lưu trên máy chủ. Tạo một tài khoản quản trị miền chỉ dành cho quá trình sao lưu. Nạp dữ liệu mật khẩu từ một tệp văn bản mà chỉ quản trị viên tên miền mới có thể truy cập.

Cách đây nhiều năm, tôi đã tạo ra một số tập lệnh .cmd có thể sao lưu các tệp cần thiết cho mọi hệ thống trên mạng theo cách này. Chương trình bên ngoài duy nhất mà tôi đã sử dụng là lệnh Grep của Cgywin và một lệnh nhắc người gửi thư smtp.

Tôi đã tạo một tập lệnh sẽ quét mạng cho các hệ thống. Nó sẽ tạo một tệp văn bản của tất cả các tên hệ thống và thông báo cho tôi qua email của bất kỳ hệ thống mới nào mà nó tìm thấy. (Tôi có một tệp cấu hình mà nó sẽ phân tích cú pháp để các hệ thống bỏ qua.) Mỗi ​​hệ thống mới có một thư mục sao lưu được tạo cho nó và một tệp cấu hình sao lưu được đặt trong đó. Người dùng có thể sửa đổi tệp này và liệt kê bất kỳ thư mục cần sao lưu. Họ cũng có thể chỉ định thời gian sao lưu dự phòng để điều đó không xảy ra khi họ ở trong văn phòng. Tôi đã chạy tập lệnh này trên máy chủ cứ sau 5 phút, vì nó không mất thời gian xử lý và tôi thích tính năng bảo mật cảnh báo cho tôi khi một hệ thống mới được cắm vào mạng.

Một tập lệnh khác sẽ phân tích tất cả các tệp cấu hình sao lưu riêng lẻ và lên lịch tác vụ để chạy bản sao lưu trên hệ thống đó. Điều này đã được chạy hàng ngày lúc 12:01 sáng.

Cuối cùng, tập lệnh sao lưu sẽ phân tích tệp cấu hình được bộ lập lịch chuyển đến nó và sử dụng robocopy sẽ sao chép tất cả các tệp. Tôi đã kiểm tra lỗi đầy đủ trên các tệp cấu hình vì người dùng sẽ chỉnh sửa chúng và tôi sẽ nhận được email về bất kỳ vấn đề nào.

Người dùng có thể đọc các tập tin sao lưu của họ, nhưng không thể xóa bản sao lưu. Điều này cung cấp một số bảo vệ khỏi thiệt hại từ một nhân viên bất mãn có thể.

Có lẽ một cái gì đó thanh lịch hơn nhiều có thể đã được tạo ra trong .vbs hoặc powershell, nhưng tôi không thực sự là một lập trình viên. Các lớp lập trình của tôi bao gồm Cobal và JCL. Tôi nhớ tôi đã sao chép các kịch bản khi tôi rời đi, nhưng ai biết chúng đang ở đâu.


1

Tôi đã khắc phục vấn đề bằng cách thay đổi tùy chọn "Chạy cho dù người dùng có đăng nhập hay không" thành "Chỉ chạy khi người dùng đăng nhập". Hãy thử nó có thể giúp bạn.


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

Tạo tập lệnh powershell này, lên lịch cho công việc là HỆ THỐNG và thiết lập để chạy khi khởi động lại cho phép tôi sử dụng ký tự ổ đĩa trong tập lệnh của mình vì UNC không phải là một lựa chọn do vấn đề đau đầu khác.


Điều này đã khắc phục vấn đề cho tôi! có lệnh này để đăng nhập với xác thực để thực thi trước khi tập lệnh đã làm nên điều kỳ diệu! Điều này giải quyết vấn đề đau đầu là phải "phản chiếu tài khoản người dùng" bằng một thứ gì đó mạnh mẽ.
Tschallacka

1
Lần đầu tiên tôi đã giúp ai đó trên stack stack, rất vui vì tôi có thể giúp. Ngoài ra, sử dụng "echo Get-Date" thay vì những gì tôi có trước đây.
Ryan McGrath

Tôi không cần đăng nhập, vì vậy tôi chỉ cần thêm một cmd /c net usemục công việc trước khi sao chép công việc trong nhiệm vụ và điều đó đã khắc phục vấn đề của tôi. Bài đăng của bạn là bài đầu tiên sau bốn giờ bắt gặp các tài khoản nhân bản được đề xuất cung cấp giải pháp dễ dàng. Hãy tiếp tục phát huy!
Tschallacka

Bạn vẫn đang duy trì các đường dẫn UNC với tập lệnh này để bạn biết. Chỉ vì bạn đang gán ký tự ổ đĩa cho đường dẫn UNC và sau đó đề cập đến ký tự ổ đĩa đó, bạn vẫn phải duy trì \\ServerName\ShareNameloại logic này. Ngoài ra, điều này không nhất thiết phải là PowerShell vì cũng NET USEchạy theo lô và theo như lập lịch với Trình lập lịch tác vụ như tài khoản HỆ THỐNG, bạn có thể làm điều đó bất kể loại tập lệnh, logic, v.v. bạn lên lịch để chạy qua Tác vụ Lập lịch biểu.
Pimp Juice IT

Hơn nữa, chỉ để làm rõ, xin lưu ý rằng bạn cũng có thể sử dụng NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>như vậy và không phải chỉ định một ký tự ổ đĩa nếu xác thực một mình cho chia sẻ là những gì cần thiết thay vì ký tự ổ đĩa thực tế.
Pimp Juice IT

0

Hãy thử thay đổi vị trí "bắt đầu" thành "c: \". Điều này dường như đã khắc phục nó cho tôi vì vậy có lẽ hệ thống đã ngăn cmd.exe thực thi từ mặc định \ windows \ system32 \ như một tính năng bảo mật.


0

Tôi gặp vấn đề tương tự khi cố gắng truy cập r: /xxxfilename.txt với ổ đĩa được ánh xạ cửa sổ r: \ server \ share khi gọi tập lệnh từ trình lập lịch tác vụ của windows.

Tôi đã giải quyết bằng cách sử dụng //server/share/xxxfilename.txt
Vui lòng lưu ý dấu gạch chéo ngược được chuyển đổi thành dấu gạch chéo chuyển tiếp.
Bây giờ tập lệnh bash cygwin của tôi chạy trong trình lập lịch tác vụ windows và trình bao cygwin.
Lưu ý: Lệnh " net use " có thể truy cập vào các ổ đĩa bản đồ nhưng hiển thị Không khả dụng R: khi tôi chạy lệnh này trong Trình lập lịch tác vụ của Windows.


Chào mừng bạn đến với Siêu người dùng! Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu. OP không đề cập đến việc sử dụng Cygwin hoặc bash.
DavidPostill

0

Như một người dùng khác đã lưu ý, việc đặt tùy chọn thành "Chạy cho dù người dùng có đăng nhập hay không" thành "Chỉ chạy khi người dùng đăng nhập" dường như vẫn hoạt động. Sau đó, bạn có thể sử dụng đường dẫn được ánh xạ (ví dụ Z :) hoặc đường dẫn máy chủ (ví dụ: \ ServerName \ Path).

Tất nhiên, nếu bạn sử dụng tùy chọn này, thì bạn phải làm như nó nói và đảm bảo rằng bạn đã đăng nhập vào máy chủ với tư cách là người dùng có quyền truy cập vào ổ đĩa có liên quan. Tôi nhớ là ở một công ty cũ với một số thiết lập công việc như thế này. Một ngày nọ ai đó "đăng xuất" máy chủ công việc chính, không ngờ rằng điều đó sẽ có bất kỳ tác động nào khi họ không tắt máy theo bất kỳ cách nào ...

Ngoài ra, những ngày này, Windows thích tự thực hiện nhiều lần khởi động lại hệ thống. Vì vậy, sử dụng giải pháp này có nguy cơ của riêng bạn.


0

Cũng lưu ý rằng nếu bạn tạo ánh xạ trong tập lệnh và mật khẩu chứa% thì nó phải được viết %% để tập lệnh hoạt động từ taskcheduler nhưng% để hoạt động từ lệnhprompt


0

người ta có thể sử dụng các lệnh sau, để được thêm vào trong tập lệnh bó, để chạy tập lệnh Batch từ tác vụ lịch trình của windows để lấy dir, tập tin được sao chép vào hệ thống cục bộ bằng cách sử dụng tác vụ lịch biểu của Windows; sử dụng mạng Y: "\\ xxx \ xxx \ xxx cd / d Y: người dùng mạng / d Y: / Y


-2

Cảm ơn, tôi nghĩ rằng việc sử dụng "start in c: \" đã giải quyết vấn đề của tôi, tôi sẽ theo dõi vấn đề này để xác nhận đã được giải quyết.

Tôi đã có cùng một vấn đề, nếu tôi nhấp trực tiếp vào lô thì nó chạy hoàn hảo nhưng không theo nhiệm vụ theo lịch trình.


Điều này không trả lời câu hỏi của tác giả. Xin đừng để lại ý kiến ​​như câu trả lời.
Ramhound

Vui lòng không thêm "cảm ơn" làm câu trả lời. Đầu tư một chút thời gian vào trang web và bạn sẽ có đủ đặc quyền để nâng cao câu trả lời bạn thích, đó là cách nói siêu cảm ơn của bạn.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.