เหตุใดงานตัวกำหนดเวลางานจึงไม่สามารถเข้าถึงไดรฟ์เครือข่ายที่แมปได้


27

ฉันมีงานตัวกำหนดเวลาเพื่อเรียกใช้ Robocopy สำหรับการสำรองไฟล์ในเครื่องไปยังเครือข่ายที่ใช้ร่วมกัน ฉันต้องใช้ข้อมูลรับรองโดเมนเพื่อเข้าถึงเครือข่ายที่ใช้ร่วมกัน แต่คอมพิวเตอร์ในพื้นที่ไม่ได้อยู่ในโดเมนและงานถูกเรียกใช้ในฐานะผู้ดูแลท้องถิ่น ทางออกนี้ของการแมปชั่วคราวและยกเลิกการแมปเครือข่ายใช้งานได้ แต่มันทำให้รหัสผ่านของฉันแสดงเป็นข้อความธรรมดาสำหรับใครก็ตามที่ดูการกระทำของตัวกำหนดเวลางาน ฉันต้องการแมปไดรฟ์เครือข่ายตามปกติแบบกึ่งถาวรดังนั้นงาน Task Scheduler เพียงแค่เรียกใช้ Robocopy และอ้างอิงถึงอักษรชื่อไดรฟ์ที่เหมาะสม อย่างไรก็ตามฉันมักจะได้รับข้อผิดพลาด "ระบบไม่สามารถหาเส้นทางที่ระบุ" ในบันทึก Robocopy เมื่อรันสิ่งนี้จาก Task Scheduler แม้ว่าคำสั่งจะทำงานได้ดีจากพรอมต์คำสั่งที่ยกระดับ (งานถูกตั้งค่าให้ทำงานด้วยสิทธิพิเศษสูงสุด) ยังทราบว่าฉันได้ทำการปรับแต่งรีจิสทรีนี้เพื่อเข้าถึงไดรฟ์ที่แมปจากพรอมต์คำสั่งยกระดับ

แก้ไข: เพื่อชี้แจงเข้าสู่ระบบในฐานะผู้ดูแลท้องถิ่นฉันเปิดตัว Windows Explorer ในฐานะผู้ดูแล ฉันแมปเครือข่ายใช้ร่วมกันเพื่อขับอักษร Y ฉันเรียกใช้พรอมต์คำสั่งในฐานะผู้ดูแลระบบและเรียกใช้

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

ทำงานได้ดี ฉันสร้างงาน Task Scheduler เพื่อเรียกใช้คำสั่งเดียวกันทั้งหมดไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่ด้วยสิทธิ์สูงสุด ฉันเรียกใช้และได้รับข้อผิดพลาด ฉันเขียนลงในบันทึกและรับ

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 ไม่มีช่องว่างในทั้งสองเส้นทาง
Craig W

บรรทัดคำสั่งที่คุณใช้ในการสำรองข้อมูลจากภายในสู่เครือข่ายคืออะไร คุณแชร์เครือข่ายประเภทใด ทำให้ฉันคิดว่าบางทีเครือข่ายใช้ร่วมกันไม่ได้ (ไม่ได้เชื่อมต่อ) เมื่อคุณทำคำสั่งสำรอง
อาทิตย์ที่

มันทำงานในฐานะผู้ใช้ของคุณหรือเพียงแค่ "ผู้ดูแลระบบ" หากเป็นผู้ใช้ของคุณไดรฟ์จะถูกแมปอย่างถาวรสำหรับผู้ใช้ของคุณหรือไม่
Nick

@SunWKim ใช่ไดรฟ์เชื่อมต่ออยู่หลังจากจับคู่แล้ว ผู้ดูแลระบบในพื้นที่ไม่มีสิทธิ์ในการแชร์เครือข่ายซึ่งเป็นสาเหตุที่ฉันต้องแมปในฐานะผู้ใช้คนอื่นก่อนที่จะใช้ Robocopy
Craig W

คำตอบ:


17

ไดรฟ์ที่แมปเป็นแนวคิดส่วนต่อประสานกับผู้ใช้และไม่สามารถใช้ได้กับงานพื้นหลังเช่นนั้น เข้าถึงเป้าหมายผ่าน UNC และตรวจสอบให้แน่ใจว่าผู้ใช้ที่งานนั้นมีสิทธิ์เข้าถึงเป้าหมาย


เป็นไปไม่ได้. คอมพิวเตอร์ไม่ได้อยู่ในโดเมนดังนั้นฉันต้องเรียกใช้งานในฐานะผู้ใช้ที่ไม่ใช่โดเมน แต่มีเพียงผู้ใช้โดเมนเท่านั้นที่สามารถเข้าถึงเครือข่ายที่ใช้ร่วมกันได้
Craig W

ฉันรู้ว่าเกมนี้ช้าไปมากแล้ว แต่คุณได้ลองแบ่งงานของคุณออกเป็น 2 งานที่กำหนดไว้หนึ่งงานสำหรับเครือข่ายที่ใช้ร่วมกันที่มีข้อมูลรับรองโดเมนและอีกงานหนึ่งที่ทำงานเป็นผู้ดูแลระบบในท้องถิ่น คุณจะต้องทำให้โซเซหรือใช้ไฟล์ mutex หรือบางอย่างเพื่อให้แน่ใจว่ามันจะเป็นไปตามลำดับ
Dan Csharpster

7

ในกรณีของฉันสิ่งที่ฉันต้องทำก็คือยกเลิกการเลือกrun with highest privilegesค่าสถานะ แต่ฉันกำลังเรียกใช้งานในผู้ใช้รายเดียวกันกับผู้ใช้ที่แมปไดรฟ์


นั่นมันสำหรับฉัน มีเหตุผล.
Tom Haws

4

ลองใช้:

pushd \\machine\share

ภายในแบตช์ไฟล์ของงานที่กำหนดของคุณ ไดรฟ์เครือข่ายที่ใช้ร่วมกันมีให้เฉพาะจากสภาพแวดล้อมที่ผู้ใช้ดำเนินการเท่านั้น "pushd" จะอนุญาตให้เรียกใช้ในบริบทของสคริปต์

เมื่อคุณใช้งานเสร็จแล้ว:

popd \\machine\share

เพื่อ unmap ไดรฟ์

การอ้างอิง: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html


1

อีกทางเลือกหนึ่งคือใช้เส้นทางเครือข่ายเต็มรูปแบบเนื่องจาก Robocopy รองรับ ie robocopy c: \ temp \\ เซิร์ฟเวอร์ \ share \ temp

หรือดีกว่านั้นให้รันการสำรองข้อมูลบนเซิร์ฟเวอร์เอง สร้างบัญชีผู้ดูแลโดเมนสำหรับกระบวนการสำรองข้อมูล ฟีด robocopy รหัสผ่านจากไฟล์ข้อความที่ผู้ดูแลโดเมนเท่านั้นที่สามารถเข้าถึงได้

หลายปีก่อนฉันสร้างสคริปต์. cmd หลายตัวที่จะสำรองไฟล์สำคัญสำหรับทุกระบบในเครือข่ายด้วยวิธีนี้ โปรแกรมภายนอกเดียวที่ฉันใช้คือคำสั่ง Grep ของ Cgywin และพรอมต์คำสั่ง smtp mail sender

ฉันสร้างหนึ่งสคริปต์ที่จะสแกนเครือข่ายเพื่อหาระบบ มันจะสร้างไฟล์ข้อความของชื่อระบบทั้งหมดและแจ้งเตือนฉันทางอีเมลของระบบใหม่ใด ๆ ที่พบ (ฉันมีไฟล์กำหนดค่าที่จะแยกวิเคราะห์ระบบที่จะข้าม) ระบบใหม่แต่ละระบบจะมีไดเรกทอรีข้อมูลสำรองที่สร้างขึ้นสำหรับไฟล์นั้นและไฟล์กำหนดค่าข้อมูลสำรองที่อยู่ในนั้น ผู้ใช้สามารถแก้ไขไฟล์นี้และแสดงรายการไดเร็กทอรีที่ต้องการสำรองข้อมูล พวกเขาสามารถระบุเวลาสำหรับการสำรองข้อมูลของพวกเขาดังนั้นมันจะไม่เกิดขึ้นเมื่ออยู่ในสำนักงาน ฉันรันสคริปต์นี้บนเซิร์ฟเวอร์ทุก ๆ 5 นาทีเนื่องจากมันไม่ใช้เวลาประมวลผลและฉันชอบคุณลักษณะด้านความปลอดภัยในการแจ้งเตือนฉันเมื่อมีการเชื่อมต่อระบบใหม่เข้ากับเครือข่าย

สคริปต์อื่นจะแยกวิเคราะห์ไฟล์การสำรองข้อมูลส่วนบุคคลทั้งหมดและกำหนดเวลางานให้เรียกใช้การสำรองข้อมูลในระบบนั้น สิ่งนี้ทำงานทุกวันเวลา 12:01 น.

ในที่สุดสคริปต์สำรองจะแยกไฟล์ปรับแต่งที่ผ่านมาโดยตัวจัดตารางเวลาและการใช้ robocopy จะคัดลอกไฟล์ทั้งหมด ฉันตรวจสอบข้อผิดพลาดเต็มรูปแบบในไฟล์กำหนดค่าเนื่องจากผู้ใช้จะแก้ไขและฉันจะได้รับอีเมลเมื่อมีปัญหาใด ๆ

ผู้ใช้สามารถอ่านไฟล์สำรองข้อมูล แต่ไม่สามารถลบข้อมูลสำรองได้ สิ่งนี้ช่วยป้องกันความเสียหายจากพนักงานที่ไม่พอใจ

อาจเป็นสิ่งที่สวยงามมากขึ้นอาจจะทำใน. vbs หรือ powershell แต่ฉันไม่ได้เป็นโปรแกรมเมอร์จริงๆ ชั้นเรียนการเขียนโปรแกรมของฉันรวม Cobal และ JCL ฉันจำได้ว่าฉันคัดลอกสคริปต์เมื่อฉันจากไป แต่ใครจะรู้ว่าตอนนี้พวกเขาอยู่ที่ไหน


1

ฉันเอาชนะปัญหาด้วยการเปลี่ยนตัวเลือก "Run ไม่ว่าผู้ใช้เข้าสู่ระบบหรือไม่" เป็น "Run เฉพาะเมื่อผู้ใช้เข้าสู่ระบบ" ลองสิ่งนี้มันอาจช่วยคุณได้


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 นี้การกำหนดเวลางานเป็นระบบและการตั้งค่าให้ทำงานในการรีบูตช่วยให้ฉันสามารถใช้ตัวอักษรไดรฟ์ในสคริปต์ของฉันเนื่องจาก UNC ไม่ใช่ตัวเลือกเนื่องจากปวดหัวกับปัญหาอื่น ๆ


นี่เป็นการแก้ไขปัญหาสำหรับฉัน! มีคำสั่งนี้เพื่อเข้าสู่ระบบด้วยการตรวจสอบเพื่อดำเนินการก่อนที่สคริปต์จะมหัศจรรย์! วิธีนี้ช่วยแก้อาการปวดหัวที่ต้อง "สะท้อนบัญชีผู้ใช้" ด้วยบางสิ่งที่มีประสิทธิภาพ
Tschallacka

1
ครั้งแรกที่ฉันช่วยใครบางคนในสแต็คล้นฉันดีใจที่ได้ช่วย นอกจากนี้ใช้ "echo Get-Date" แทนสิ่งที่ฉันมีมาก่อน
Ryan McGrath

ฉันไม่ต้องการการบันทึกดังนั้นฉันเพิ่งเพิ่มcmd /c net useรายการงานก่อนหน้าคัดลอกรายการงานในงานและนั่นช่วยแก้ไขปัญหาของฉัน โพสต์ของคุณเป็นครั้งแรกหลังจากสี่ชั่วโมงที่พบบัญชีมิเรอร์ที่แนะนำซึ่งให้โซลูชันที่ง่าย ดีแล้วทำต่อไป!
Tschallacka

คุณยังคงรักษาเส้นทาง UNC ด้วยสคริปต์นี้เพื่อให้คุณรู้ เพียงเพราะคุณกำลังกำหนดอักษรระบุไดรฟ์ให้กับเส้นทาง UNC แล้วอ้างอิงถึงอักษรชื่อไดรฟ์นั้นคุณยังคงต้องเก็บรักษาไว้\\ServerName\ShareNameในตรรกะประเภทนี้ นอกจากนี้สิ่งนี้ไม่จำเป็นต้องเป็น PowerShell ตั้งแต่NET USEทำงานผ่านแบทช์เช่นเดียวกับการกำหนดเวลาด้วย Task Scheduler ในฐานะบัญชี SYSTEM คุณสามารถทำได้โดยไม่คำนึงถึงประเภทของสคริปต์ตรรกะ ฯลฯ คุณกำหนดเวลาให้ทำงานผ่านงาน จัดตารางเวลา
Pimp Juice IT

นอกจากนี้เพื่อชี้แจงโปรดทราบว่าคุณสามารถใช้NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>แบบนั้นได้โดยไม่ต้องระบุอักษรระบุไดรฟ์เลยหากการพิสูจน์ตัวตนเพียงอย่างเดียวกับการแชร์เป็นสิ่งที่จำเป็นมากกว่าอักษรระบุไดรฟ์จริง
Pimp Juice IT

0

ลองเปลี่ยนตำแหน่ง "เริ่มต้นใน" เป็น "c: \" นี่ดูเหมือนจะแก้ไขให้ฉันดังนั้นบางทีระบบอาจป้องกัน cmd.exe ไม่ให้ทำงานจาก default \ windows \ system32 \ เป็นคุณลักษณะด้านความปลอดภัย


0

ฉันมีปัญหาเดียวกันพยายามเข้าถึงr: /xxxfilename.txtด้วยไดรฟ์ที่แมป windows r: \ server \ share เมื่อเรียกสคริปต์จากตัวกำหนดเวลางานของ windows

ฉันแก้ไขโดยใช้//server/share/xxxfilename.txt
โปรดสังเกตว่าแบ็กสแลชแปลงเป็นสแลชไปข้างหน้า
ตอนนี้ bash cygwin script ของฉันทำงานใน windows task scheduler และ cygwin shell
หมายเหตุ:คำสั่ง" net use " สามารถเข้าถึงไดรฟ์แผนที่ในเชลล์ แต่แสดง Unavailable R: เมื่อฉันรันคำสั่งนี้ใน Windows task Scheduler


ยินดีต้อนรับสู่ Super User! โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง คำตอบของคุณไม่ตอบคำถามเดิม OP ไม่ได้กล่าวถึงการใช้ Cygwin หรือ bash
DavidPostill

0

ตามที่ผู้ใช้รายอื่นบันทึกไว้การตั้งค่าตัวเลือก "Run ไม่ว่าผู้ใช้เข้าสู่ระบบหรือไม่" เป็น "Run เฉพาะเมื่อผู้ใช้เข้าสู่ระบบ" ดูเหมือนจะทำงาน จากนั้นคุณสามารถใช้เส้นทางที่แมป (เช่น Z :) หรือเส้นทางเซิร์ฟเวอร์ (เช่น \\ ServerName \ Path)

แน่นอนถ้าคุณใช้ตัวเลือกนี้คุณต้องทำตามที่ระบุไว้และตรวจสอบให้แน่ใจว่าคุณได้ลงชื่อเข้าใช้เซิร์ฟเวอร์ในฐานะผู้ใช้ที่สามารถเข้าถึงไดรฟ์ที่เกี่ยวข้องได้ ฉันจำได้ว่าอยู่ใน บริษัท เก่าที่มีงานจำนวนมากเช่นนี้ วันหนึ่งมีคน "ลงชื่อออก" ของเซิร์ฟเวอร์งานหลักไม่คาดหวังว่าจะมีผลกระทบใด ๆ เนื่องจากไม่ปิดเครื่องในทางใดทางหนึ่ง ...

นอกจากนี้ทุกวันนี้ Windows ยังชอบที่จะรีบูตระบบด้วยตัวเองเป็นจำนวนมาก ดังนั้นให้ใช้วิธีนี้ในความเสี่ยงของคุณเอง


0

นอกจากนี้โปรดทราบว่าหากคุณสร้างการจับคู่ในสคริปต์และรหัสผ่านมี% แล้วจะต้องมีการเขียน %% เพื่อให้สคริปต์ทำงานจาก taskcheduler แต่% เพื่อทำงานจาก commandprompt


0

หนึ่งสามารถใช้คำสั่งต่อไปนี้เพื่อเพิ่มในชุดสคริปต์ตัวเองเพื่อเรียกใช้สคริปต์ Batch จาก Windows กำหนดการงานเพื่อรับ dir ไฟล์คัดลอกไปยังระบบท้องถิ่นโดยใช้งานกำหนดเวลา Windows; ใช้เน็ต Y: "\\ xxx \ xxx \ xxx cd / d Y: ผู้ใช้เน็ต / d Y: / Y


-2

ขอบคุณฉันคิดว่าการใช้ "เริ่มต้นใน c: \" แก้ไขปัญหาของฉันฉันจะติดตามปัญหานี้เพื่อยืนยันว่าได้รับการแก้ไขแล้ว

ฉันมีปัญหาเดียวกันถ้าฉันคลิกที่แบทช์โดยตรงมันจะทำงานได้อย่างไร้ที่ติ แต่ไม่ใช่ภายใต้งานที่กำหนดไว้


นี่ไม่ได้ตอบคำถามของผู้เขียน กรุณาอย่าแสดงความคิดเห็นเป็นคำตอบ
Ramhound

โปรดอย่าเพิ่ม "ขอบคุณ" เป็นคำตอบ ลงทุนเวลาในไซต์และคุณจะได้รับสิทธิ์ที่เพียงพอในการถอนคำตอบที่คุณชอบซึ่งเป็นวิธีที่ผู้ใช้ระดับสูงในการพูดขอบคุณ
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.