การเรียกใช้ไฟล์แบตช์จาก Task Scheduler โดยไม่มีผู้ใช้กำลังเข้าสู่


10

ฉันพยายามเรียกใช้ไฟล์แบตช์ใน Windows 7 จาก Task Scheduler ฉันสามารถเรียกใช้ไฟล์แบตช์ได้ถ้าฉันเรียกใช้จากพรอมต์คำสั่ง

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

ฉันได้ลองเปลี่ยนแบตช์ไฟล์เป็นอะไร แต่บรรทัดต่อไปนี้เพื่อให้แน่ใจว่าไม่ใช่เพราะสิ่งที่อยู่ในแบทช์ไฟล์:

echo "success" >> c:\temp\test.log

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


คุณใช้บัญชีใดในการทำงาน คุณตั้งค่าทริกเกอร์อะไร
camilohe

ลองใช้งานเป็นบัญชีบริการระบบ
SamAndrew81

คำตอบ:


20

ตารางเวลาการทำงาน: สคริปต์ชุดที่กำหนดเวลาไม่ได้ทำงาน

คุณสมบัติตัวกำหนดเวลางาน . .

จาก Windows Task SchedulerในงานProperties (ดูภาพหน้าจอส่วนใหญ่ด้านล่าง)ใน . .

  • 1. Generalแท็บตรวจสอบให้แน่ใจว่าตัวเลือกด้านล่างเลือก / ตรวจสอบหรือไม่เลือกเช่นเดียวกับที่แสดงในหน้าจอพิมพ์ A

    • ยกเลิกการเลือก Run only when user is logged on
    • ตรวจสอบ Run whether user is logged on or not
    • ตรวจสอบ Run with the highest privileges
  • 2. Conditionsแท็บให้แน่ใจว่าด้านล่างจะมีตัวเลือกให้เลือก , การตรวจสอบหรือไม่ถูกตรวจสอบเช่นเดียวกับที่ปรากฏในหน้าจอพิมพ์ B

    • ตรวจสอบ Wake the computer to run this task
  • 3. Actionsแท็บคลิกEditและตรวจสอบให้แน่ใจว่าStart in (optional)ได้ตั้งค่าตามที่แสดงในตัวอย่างด้านล่าง ( อย่าใส่เครื่องหมายอัญประกาศล้อมรอบ) สำหรับเส้นทางแบบเต็มซึ่งชี้ที่สคริปต์แบทช์ตั้งอยู่โดยไม่มีแบ็กสแลชสุดท้าย " \" พิมพ์หน้าจอ C


การพิจารณาความปลอดภัย

  • เมื่อคุณกดOK( 2.ด้านบน) มันจะแจ้งให้คุณทราบเพื่อให้เรียกใช้สิ่งนี้เป็นและข้อมูลประจำตัวนั้นคือสิ่งที่จะต้องเข้าถึงEXECUTEไฟล์แบตช์ที่มีอยู่และมันจะต้องเข้าถึงเพื่อทำสิ่งที่ไฟล์แบทช์กำลังทำงานอยู่ ที่คุณเขียนออกมา

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

  • ดูเหมือนว่าตัวเลือกที่Run whether user is logged on or notคุณต้องตรวจสอบตัวเลือกRun with highest privilegesเพื่อให้ทำงานตามที่คาดหวังจาก Task Scheduler

ตรวจสอบข้อผิดพลาด

  • หากมีปัญหากับแบทช์สคริปต์จริง แต่ Windows Task Scheduler ทำงานจริงเพื่อรัน แต่มีข้อผิดพลาดตรรกะของสคริปต์แบทช์ออกมาไม่ว่าด้วยเหตุผลใดก็ตามTask Schedulerอาจไม่เห็นความล้มเหลวในระดับนี้ จากมุมมองของมัน (โดยค่าเริ่มต้นส่วนใหญ่), มันกำลังประมวลผลแบตช์ไฟล์ตราบใดที่มันสามารถเรียกใช้งานและเข้าถึงได้, มันทำงานได้สำเร็จ

  • เพิ่มการตรวจสอบข้อผิดพลาดหรือการบันทึกลงในตรรกะของสคริปต์ชุดงานเพื่อตรวจจับ (หรือแก้ไขปัญหา ) ปัญหาในระดับนี้รวมถึงการตรวจสอบให้แน่ใจว่าบริบทความปลอดภัยซึ่งตัวกำหนดตารางเวลาแบบชุดทำงานดำเนินการตามที่มีการเข้าถึงคำสั่งทรัพยากร ฯลฯ


ข้อพิจารณานโยบายกลุ่ม

ตรวจสอบนโยบายกลุ่มและเข้าสู่ระบบในฐานะสิทธิ์การใช้งานแบทช์

คำตอบ: ใน Windows สิทธิพิเศษนี้จะได้รับผ่านท้องถิ่นหรือนโยบายความปลอดภัยของโดเมน เมื่อต้องการทำเช่นนี้โดยใช้นโยบายความปลอดภัยท้องถิ่นทำตามขั้นตอนเหล่านี้

  1. ในแผงควบคุมเปิดเครื่องมือการจัดการจากนั้น นโยบายความปลอดภัยท้องถิ่น
  2. ภายใต้การตั้งค่าการรักษาความปลอดภัยเปิดนโยบายท้องถิ่นและไฮไลท์สิทธิ์ของผู้ใช้ที่ได้รับมอบหมาย
  3. ค้นหาเข้าสู่ระบบเป็นชุดงาน เปิดคุณสมบัติและเพิ่มผู้ใช้ที่ต้องการสิทธิ์นี้
  4. เมื่อเสร็จแล้วบันทึกการเปลี่ยนแปลงของคุณและปิดหน้าต่างการตั้งค่าความปลอดภัยท้องถิ่น

การเปลี่ยนแปลงของคุณจะมีผลทันที ในการเปลี่ยนแปลงนโยบายความปลอดภัยของโดเมนบนตัวควบคุมโดเมนให้ใช้ยูทิลิตี้นโยบายความปลอดภัยของโดเมนในแผงควบคุม


Batch Script Logic พร้อมแมปไดรฟ์หรือเส้นทาง UNC แบบเต็มและปัญหา . .

หากสคริปต์ของคุณอ้างอิงถึงไดรฟ์เครือข่ายที่แมป แต่คุณต้องการให้ทำRun whether the user is logged on or notภายใต้บริบทนี้การแมปไดรฟ์อาจไม่ได้อยู่ที่นั่นสำหรับกระบวนการแบ็ตช์เพื่อทำสิ่งที่คาดหวัง

หากเป็นไปได้ให้ใช้UNCเส้นทางในตรรกะสคริปต์ชุดงานของคุณแทนที่จะเป็นตัวอักษรไดรฟ์ที่แมปเพื่อหลีกเลี่ยงปัญหา มิฉะนั้นคุณอาจต้องใช้PUSHD \\ServerName\ShareNameในตอนต้นของกระบวนการแบทช์จากนั้นใช้POPDเมื่อสิ้นสุดกระบวนการแบทช์ คุณสามารถแมปไดรฟ์ด้วยNET USE X: \\ServerName\ShareNameในตอนต้นของกระบวนการแบทช์แล้วถอดไดรฟ์ด้วยNET USE X: /DELETEเมื่อสิ้นสุดกระบวนการแบทช์


อื่น ๆ

  • MS HOTFIX (KB977353): นโยบายกลุ่มรายการการกำหนดลักษณะงานทันทีไม่ทำงานบนคอมพิวเตอร์ไคลเอนต์ที่ใช้ Windows 7 หรือ Windows Server 2008 R2

  • ดูที่ตารางงานของแท็บและตัวเลือกที่ระบุว่าเป็นSettings Stop the task if it runs longer than:หากตัวเลือกนี้ได้รับการตรวจสอบและระยะเวลาน้อยกว่าสคริปต์ที่กำลังทำงาน Task Scheduler จะฆ่ามันก่อนและดังนั้นคุณอาจไม่ได้รับผลลัพธ์ตามที่คาดไว้ นี่คือสิ่งอื่นที่ต้องตรวจสอบเมื่อแก้ไขปัญหาในกรณี

    ป้อนคำอธิบายรูปภาพที่นี่

  • จากTriggersแท็บของภารกิจที่กำหนดเวลาไว้เมื่อคุณเลือกEditตัวเลือกต้องแน่ใจว่าตั้งStart:เวลาและวันที่เป็นค่าที่ยังไม่ผ่าน ตรวจสอบให้แน่ใจว่านี้มีวันที่และเวลาที่กำหนดเพื่อที่ของค่าในอนาคต มิฉะนั้นคุณอาจสังเกตเห็นว่างานระบุว่ามันมีกำหนดที่จะทำงานในเวลาที่กำหนดต่อไปตามที่คุณคาดหวัง; อย่างไรก็ตามมันจะไม่ถูกเรียกใช้งานโดยTask Schedulerและแท็บTask Scheduler Historyแสดงว่ามันถูกเรียกใช้งานมาแล้ว (เพราะไม่ใช่) เพียงแค่แก้ไขทริกเกอร์และอัปเดตด้วยวันที่และ / หรือเวลาในอนาคตเพื่อแก้ไขปัญหานี้หากคุณประสบ

    ป้อนคำอธิบายรูปภาพที่นี่


PRINT SCREENS

พิมพ์หน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่

พิมพ์หน้าจอ B

ป้อนคำอธิบายรูปภาพที่นี่

พิมพ์หน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่

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