ฉันจะออกจากระบบผู้ใช้โดยอัตโนมัติจากเครื่อง Windows ได้อย่างไร


9

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

เป็นไปได้ไหมที่จะล็อกเอาต์ผู้ใช้จากเครื่องโดยอัตโนมัติหากพวกเขาไม่ได้ใช้งานเป็นเวลา 24 ชั่วโมง?


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

คอมพิวเตอร์อยู่ในเครือข่ายโดเมน Windows - แม้ว่าฉันต้องการให้การล็อกเอาต์อัตโนมัติทำงานกับเครื่องเดียวเท่านั้น (และฉันไม่ใช่ผู้ดูแลระบบเครือข่าย)

.


1
นี่เป็นเครือข่ายโดเมน Windows หรือไม่
Moab

@Moab: คอมพิวเตอร์อยู่ในเครือข่ายโดเมน Windows - แม้ว่าฉันต้องการให้การล็อกเอาต์อัตโนมัติทำงานกับเครื่องเดียวเท่านั้น (และฉันไม่ใช่ผู้ดูแลระบบเครือข่าย)
Jonas

@ Jonas คำที่คุณเลือกทำให้ดูเหมือนว่าพีซีมากกว่าหนึ่งเครื่องคุณอาจแก้ไขโพสต์ต้นฉบับของคุณเพื่อรวมข้อมูลใหม่นี้
Moab

@Moab: ฉันพยายามที่จะชี้แจงคำถาม มันดีกว่าไหม
Jonas

ตอนนี้ได้ดู
Moab

คำตอบ:


6

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

@echo off
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do logoff %%b

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

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

@echo off
:Top
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else %%e GTR 32 (logoff %%b)
choice /T 120 /C 1 /D 1 /N
goto top

สคริปต์นี้ใช้คำสั่งแบบสอบถามเดียวกัน แต่จะตรวจสอบส่วน "IDLE TIME" เพิ่มเติมของผลลัพธ์โดยทำการล็อกผู้ใช้ออกหากเวลาว่างมากกว่า 32 ("GTR 32") วลีนั้นเกิดขึ้นสองครั้งเพราะโทเค็น "เวลาว่าง" สามารถเกิดขึ้นได้สองตำแหน่งที่แตกต่างกันเล็กน้อย จากนั้นบรรทัดที่ขึ้นต้นด้วย "ตัวเลือก" จะรอ 2 นาทีก่อนที่จะดำเนินการอีกครั้งโดยวนซ้ำไปที่จุดเริ่มต้น คุณสามารถเพิ่มหรือลดค่า "32" ได้ตามต้องการ

พบที่นี่


@eMansipater: คุณช่วยอธิบายสิ่งนี้ได้ไหมและฉันจะตั้งเวลา 24 ชั่วโมงได้ไหม?
Jonas

1
ทางออกที่ดีที่สุดคือปิดการใช้งานการสลับผู้ใช้อย่างรวดเร็วซึ่งจะบังคับให้ออกจากระบบก่อนที่ผู้ใช้รายใหม่จะสามารถเข้าสู่บัญชีของพวกเขาได้
Moab

1
@Moab การปิดใช้งานการสลับผู้ใช้อย่างรวดเร็วหมายความว่าผู้ดูแลระบบไม่สามารถเข้าสู่ระบบได้หากผู้ใช้ก่อนหน้านี้ล็อกหน้าจอ @Jonas คำถามที่ชาญฉลาด - บิตในวงเล็บคือการใช้คำสั่ง query จาก support.microsoft.com/kb/186592 เพื่อค้นหาผู้ใช้ที่ถูกตัดการเชื่อมต่อโดยการค้นหาวลี "ดิสก์" แล้วจึงออกจากระบบ คำสั่งทางเลือกกำลังรอการดำเนินการทุก 2 นาทีเท่านั้น ไม่จำเป็นต้องใช้ตัวเลือก 24 ชั่วโมงเนื่องจากสคริปต์นี้ควรออกจากระบบผู้ใช้หากผู้ใช้อื่นได้เข้าสู่ระบบแล้ว
eMansipater

1
@ เพียงแค่แบตช์ไฟล์ใช้ "%% a" แต่เพื่อทำสิ่งเดียวกันที่บรรทัดคำสั่งคุณพิมพ์ "% a" แทน - ซึ่งจะช่วยแก้จุดบกพร่องได้ ฉันไม่มีเครื่อง Windows ที่สะดวกในการลองใช้สคริปต์ดังนั้นอาจมีบางอย่างผิดปกติกับมัน คุณสามารถลองเปลี่ยนคำสั่ง "GTR 32 (ออกจากระบบ %% b)" เป็น "echo logoff %% b" โดยไม่ใส่เครื่องหมายอัญประกาศหรือ "echo logoff% b" โดยไม่ต้องใส่เครื่องหมายอัญประกาศหากพิมพ์ลงไปด้วยวิธีนั้นจะพิมพ์ ผู้ใช้ที่พยายามออกจากระบบ หากพิมพ์ขยะหรือไม่แสดงว่าสคริปต์นั้นมีรูปแบบไม่ถูกต้อง ฉันเกรงว่าฉันไม่รู้รูปแบบผลลัพธ์ "ค้นหา" ด้วยใจเพื่อตรวจสอบ
eMansipater

1
@ Jonas ฉันมีโอกาสที่จะดับเบิ้ลเช็คเอาท์ของคำสั่งการสืบค้นและส่วนต่าง ๆ ของสคริปต์นั้นเพื่อให้การออกจากระบบจะเกิดขึ้นก็ต่อเมื่อผู้ใช้ไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง 'if %% d GTR 32' หมายถึงการเรียกใช้คำสั่ง logoff หากโทเค็น %% d มากกว่า 32 ขึ้นอยู่กับการใช้เดสก์ท็อประยะไกล ฯลฯ โทเค็น "ว่าง" สามารถปรากฏในสองแห่งซึ่งเป็นสาเหตุที่สคริปต์ ตรวจสอบทั้งสองสถานการณ์ ฉบับแก้ไขของคุณเพียงล็อกเอาใด ๆ ที่ผู้ใช้ไม่ได้ใช้งานไม่ว่านานจะได้รับ ถ้าฉันสามารถไปที่เครื่อง windows ฉันสามารถตรวจสอบไวยากรณ์
eMansipater

1
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else (if %%e GTR 35 (logoff %%b))

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

for /f "tokens=1-8 delims=,:/ " %%a in ('query user ^| find /i "disc"') do if %%d GTR 23 (if %%h GTR 2012 (logoff %%b))

แก้ไข 23 เพื่อปรับชั่วโมงด้านบนจะทำงานในเวลาว่าง 24 ชั่วโมงหรือมากกว่า %% h 2012 รับรองว่าค่า %% d คือหนึ่งชั่วโมงและไม่ใช่ค่านาที


0

ฉันจะหาวิธีปิดใช้งานคุณสมบัติ "สลับผู้ใช้" สิ่งนี้อาจช่วยได้


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