งานที่กำหนดเวลาทำงานเป็นระบบ - รันบางสิ่งในฐานะผู้ใช้ปัจจุบัน


2

ฉันมีงานตามกำหนดเวลาที่ทำงานเป็นชุดไฟล์ซึ่งทำบางสิ่ง ฉันต้องการให้แบตช์ไฟล์เริ่มต้นแบตช์ไฟล์อื่นที่ทำงานในพื้นที่ของผู้ใช้ เช่น% username% == ผู้ใช้ที่เข้าสู่ระบบในปัจจุบันด้วยสิทธิ์ผู้ใช้ ฯลฯ ฉันจะรันคำสั่งภายใต้ผู้ใช้ปัจจุบันได้อย่างไรเนื่องจากงานที่กำหนดเวลาไว้จะทำงานด้วยสิทธิ์ระบบ

ฉันต้องการสิ่งนี้สำหรับทั้ง Windows XP และ Windows 7

คำตอบ:


3

นับตั้งแต่เปิดตัวบริการเทอร์มินัล "ผู้ใช้ปัจจุบัน" สามารถเป็นพหูพจน์ แม้แต่ XP ยังรองรับการสับเปลี่ยนผู้ใช้อย่างรวดเร็ว

สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือ "ผู้ใช้เชื่อมต่อกับเซสชันของคอนโซล" สำหรับเรื่องนี้ใช้WTSGetActiveConsoleSessionId () + WTSQueryUserToken () + CreateEnvironmentBlock () + CreateProcessAsUser ()


ฉันเขียนสิ่งนี้: https://gist.github.com/871048 - คอมไพล์รันด้วยพา ธ เต็มไปยังไฟล์แบตช์ของคุณเป็นอาร์กิวเมนต์

ใช่ต้องใช้. NET Runtime แต่เป็นไปได้ว่าระบบของคุณมีอยู่แล้ว คอมไพเลอร์ส่วนหนึ่งของรันไทม์เช่นกัน: %SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe(เวอร์ชันใด ๆ ที่ขึ้นต้นด้วยv2.*จะใช้งานได้)

หมายเหตุ: WTSQueryUserToken () ต้องโปรแกรมที่จะทำงานตามที่LocalSystem (ตามเอกสาร , SeTcbPrivilegeไม่เพียงพอ แต่ฉันยังไม่ได้ตรวจสอบ)


เมื่อคำตอบนี้ถูกโพสต์ผมไม่ทราบเกี่ยวกับpsexecเลย การใช้มันอาจจะง่ายกว่า
grawity

2

ภายใต้ "เมื่อเรียกใช้งานให้ใช้บัญชีผู้ใช้ต่อไปนี้:" คุณสามารถตั้งค่าเป็นกลุ่ม "BUILTIN \ Users" มันจะเรียกใช้งานเป็นผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน


0

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

Windows 7: ในหน้าต่างคุณสมบัติสำหรับงานมีปุ่มในตัวเลือกความปลอดภัยที่เรียกว่า "เปลี่ยนผู้ใช้หรือกลุ่ม"

Windows XP: ในหน้าต่างคุณสมบัติของงานคุณสามารถป้อนชื่อผู้ใช้ในฟิลด์ "เรียกใช้เป็น"

หนึ่งในตัวเลือกสุดท้ายคือการสร้างสคริปต์เริ่มต้นที่จะสร้างงานเมื่อผู้ใช้เข้าสู่ระบบและสคริปต์ออกจากระบบสหายเพื่อลบมันเมื่อพวกเขาออกจากระบบ คำสั่งคือ "Schtasks" ซึ่งเกือบจะเหมือนกันใน XP และ 7 เอกสารสำหรับคำสั่งนั้นมีให้จาก MS ที่เว็บไซต์ต่อไปนี้: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs /en-us/schtasks.mspx?mfr=true


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

1
Windows 7 ดูเหมือนจะไม่มีข้อกำหนดในการป้อนรหัสผ่านอย่างน้อยตอนที่ฉันเพิ่งลองด้วย UAC สำหรับ XP คุณสามารถลองใช้คำสั่ง AT ที่เลิกใช้แล้วแทน
Hyppy

1
แต่คำสั่ง AT แม้จะมีการตั้งค่าสถานะ / การโต้ตอบให้เรียกใช้คำสั่งในสิทธิ์ของระบบ ฉันได้ทำการทดสอบเมื่อเช้านี้จริง ๆ แล้วฉันไม่สามารถเรียกใช้ในสภาพแวดล้อมของผู้ใช้ได้ ดูเหมือนว่ามีหลายวิธีที่ฉันสามารถทำได้ใน Windows 7 แต่ปัญหาใหญ่ในขณะนี้คือ Windows XP
Ricket
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.