ใน Task Scheduler ฉันมีงานที่ใช้บัญชีระบบที่รันไฟล์แบตช์ ผู้ใช้ (ไม่ใช่ผู้ดูแลระบบ) มีแบตช์ไฟล์อื่นที่เรียกใช้งาน ชุดงานของผู้ใช้สามารถตั้งค่าตัวแปรที่สามารถใช้โดยชุดงานได้อย่างไร
ใน Task Scheduler ฉันมีงานที่ใช้บัญชีระบบที่รันไฟล์แบตช์ ผู้ใช้ (ไม่ใช่ผู้ดูแลระบบ) มีแบตช์ไฟล์อื่นที่เรียกใช้งาน ชุดงานของผู้ใช้สามารถตั้งค่าตัวแปรที่สามารถใช้โดยชุดงานได้อย่างไร
คำตอบ:
ตั้งค่าตัวแปรแบบไดนามิกในชุดสคริปต์ที่จะดำเนินการโดย Task Scheduler
เนื่องจากคุณชี้แจงและยืนยันสิ่งต่อไปนี้:
- คุณต้องการค่าตัวแปรในชุดสคริปต์ที่Task Schedulerดำเนินการ
SYSTEM
เพื่อตั้งเป็นค่าที่ตรงกับ SID ของผู้ใช้ที่เรียกใช้สคริปต์การเข้าสู่ระบบ- คุณสามารถใช้พา ธ ไฟล์ภายในเครื่องสำหรับตำแหน่งสคริปต์ที่Task Schedulerจะทำงาน
- คุณจะไม่มีผู้ใช้มากกว่าหนึ่งรายที่ลงชื่อเข้าใช้ระบบปฏิบัติการเดียวกันพร้อมกันที่จะเรียกใช้สคริปต์นี้
ฉันได้เขียนวิธีแก้ปัญหานี้ขึ้นเป็นคำตอบแยกต่างหากโดยมีรายละเอียดเพิ่มเติมของวิธีการที่แนะนำ
คุณจะต้องมั่นใจในสิ่งต่อไปนี้:
- ยืนยันว่ามีการตั้งค่าชื่องานที่เกี่ยวข้อง ตามกำหนดเวลาในแต่ละเครื่องที่จะดำเนินการสคริปต์ชุดงานในเครื่อง
- ยืนยันว่าแต่ละงานที่กำหนดเวลามีความสัมพันธ์บนแต่ละเครื่องที่ดำเนินการโดย
schtasks
ชี้ไปที่เส้นทางสคริปต์แบตช์มาตรฐานและชื่อไฟล์เดียวกัน
ฉันใช้ตรรกะที่คุณได้ตั้งค่าไว้แล้ว แต่ฉันได้เพิ่มตัวแปรพิเศษอีกสองสามอย่างและตรรกะIF แบบมีเงื่อนไขซึ่งจะทำให้โฟลเดอร์บนเครื่องโลคัลสคริปต์แบทช์จะอยู่หากยังไม่มีอยู่และลบไฟล์แบทช์ในที่นั้น โฟลเดอร์หากมีอยู่แล้วตั้งแต่สร้างขึ้นต่อการรัน
สิ่งสำคัญนี้จะสร้างสคริปต์ชุดแบบไดนามิกในแต่ละครั้งที่มีการดำเนินการ (ที่เข้าสู่ระบบ) สคริปต์ชุดงานที่สร้างขึ้นจะมีReg Add
ตรรกะและคำสั่งที่มีค่าส่วน SID ที่เป็นของผู้ใช้สคริปต์การเข้าสู่ระบบวิ่งหาที่เข้าสู่ระบบของพวกเขา ดังนั้นเมื่อTask Schedulerรันสคริปต์สิ่งนี้จะช่วยให้มั่นใจได้ว่าสคริปต์นั้นมีค่าที่ต้องการเพิ่มต่อการดำเนินการเข้าสู่ระบบ / สคริปต์เสมอ
@ECHO ON
SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd
IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"
for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i
ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"
schtasks /run /tn "My Profile Changer"
คุณจะต้องตรวจสอบให้แน่ใจว่างานที่คุณบอกschtasks
ให้ดำเนินการ (เช่น"My Profile Changer"
) ให้ชี้ไปที่เส้นทางแบบเต็มเช่นเดียวกับที่คุณระบุในสคริปต์แบทช์ล็อกอินสำหรับค่าSET LocalDir=
และSET TaskScript=
ตัวแปร
ดังนั้นหากตัวแปรสคริปต์การเข้าสู่ระบบเท่ากันC:\localfolder\TaskScript.cmd
นี่เป็นค่าเดียวกันกับที่คุณต้องการให้Program/Script
ฟิลด์ชี้ไป ฉันขอแนะนำให้ใส่SET LocalDir=
ค่าตัวแปรในStart in (optional):
ฟิลด์ แต่คุณไม่จำเป็นต้องเพิ่มอาร์กิวเมนต์ใด ๆ ดังนั้นปล่อยให้Add Arguments (optional):
ฟิลด์ว่างเปล่าหรือว่างเปล่าโดยไม่มีสิ่งใดอยู่ ( ด้านล่างภาพหน้าจอ )
schtasks
จากบรรทัดคำสั่งหรือ GUI Task Scheduler คุณยังสามารถสร้างตรรกะหลังจากschtasks
เสร็จสิ้นการลบแบทช์สคริปต์และโฟลเดอร์ดังนั้นมันจะไม่อยู่และผู้ใช้จะต้องสร้างทั้งสองแล้วมีการเข้าถึงบรรทัดคำสั่งหรือการเข้าถึง GUI Task Scheduler และรู้ว่าสิ่งที่จะดำเนินการ