ฉันจะส่งข้อโต้แย้งไปยังงานที่กำหนดเวลาไว้ได้อย่างไร


2

ใน Task Scheduler ฉันมีงานที่ใช้บัญชีระบบที่รันไฟล์แบตช์ ผู้ใช้ (ไม่ใช่ผู้ดูแลระบบ) มีแบตช์ไฟล์อื่นที่เรียกใช้งาน ชุดงานของผู้ใช้สามารถตั้งค่าตัวแปรที่สามารถใช้โดยชุดงานได้อย่างไร

คำตอบ:


2

ตั้งค่าตัวแปรแบบไดนามิกในชุดสคริปต์ที่จะดำเนินการโดย Task Scheduler

เนื่องจากคุณชี้แจงและยืนยันสิ่งต่อไปนี้:

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

ฉันได้เขียนวิธีแก้ปัญหานี้ขึ้นเป็นคำตอบแยกต่างหากโดยมีรายละเอียดเพิ่มเติมของวิธีการที่แนะนำ

คุณจะต้องมั่นใจในสิ่งต่อไปนี้:

  • ยืนยันว่ามีการตั้งค่าชื่องานที่เกี่ยวข้อง ตามกำหนดเวลาในแต่ละเครื่องที่จะดำเนินการสคริปต์ชุดงานในเครื่อง
  • ยืนยันว่าแต่ละงานที่กำหนดเวลามีความสัมพันธ์บนแต่ละเครื่องที่ดำเนินการโดยschtasksชี้ไปที่เส้นทางสคริปต์แบตช์มาตรฐานและชื่อไฟล์เดียวกัน

Batch [เข้าสู่ระบบ] ตัวอย่างสคริปต์

ฉันใช้ตรรกะที่คุณได้ตั้งค่าไว้แล้ว แต่ฉันได้เพิ่มตัวแปรพิเศษอีกสองสามอย่างและตรรกะ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):ฟิลด์ว่างเปล่าหรือว่างเปล่าโดยไม่มีสิ่งใดอยู่ ( ด้านล่างภาพหน้าจอ )

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


แหล่งข้อมูลเพิ่มเติม


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

@ Jason ฉันคิดว่าการเขียนแค่ค่าแทนที่จะเป็นทั้งสคริปต์ก็ใช้ได้เช่นกัน การรักษาความปลอดภัยที่ชาญฉลาดพวกเขาจะต้องเข้าถึงโฟลเดอร์เดียวกันกับไฟล์ที่มีค่าอยู่ ฉันคุ้นเคยกับการบอกแบทช์ให้อ่านเนื้อหาของไฟล์จากรายการหรืออะไรก็ตามแล้วตั้งให้เป็นตัวแปรในการประมวลผลแบตช์ที่เหลือ บางทีอย่างน้อยฉันก็ได้ช่วยคุณคิดกลยุทธ์ที่จะพอเพียง เพิ่งทราบว่าคุณสามารถควบคุมตรรกะของสคริปต์การเข้าสู่ระบบและมันมีตรรกะที่จะลบชุดงานที่จะดำเนินการถ้ามันมีอยู่ก่อนแล้วเขียนมันด้วยตรรกะที่คุณอนุญาตเท่านั้น
Pimp Juice IT

@ Jason ฉันแค่อยากให้คุณสังเกตสิ่งนี้ว่าแม้ว่าผู้ใช้จะสร้างสคริปต์มันจะไม่ถูกประมวลผลด้วยตรรกะนั้นเว้นแต่พวกเขาจะเรียกใช้schtasksจากบรรทัดคำสั่งหรือ GUI Task Scheduler คุณยังสามารถสร้างตรรกะหลังจากschtasksเสร็จสิ้นการลบแบทช์สคริปต์และโฟลเดอร์ดังนั้นมันจะไม่อยู่และผู้ใช้จะต้องสร้างทั้งสองแล้วมีการเข้าถึงบรรทัดคำสั่งหรือการเข้าถึง GUI Task Scheduler และรู้ว่าสิ่งที่จะดำเนินการ
Pimp Juice IT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.