Làm cách nào tôi có thể tự động đăng xuất người dùng từ máy Windows?


9

Tôi muốn đảm bảo rằng mọi người đã đăng xuất sau khi họ hoàn thành công việc trên một máy đa người dùng cụ thể. Hiện tại, người dùng tiếp theo sẽ chỉ "chuyển đổi người dùng" và tiếp tục làm việc, nhưng có nhiều người dùng đăng nhập cùng lúc với các chương trình mở dường như sử dụng hết tài nguyên.

Có thể tự động đăng xuất người dùng khỏi máy nếu họ không hoạt động trong 24 giờ?


Ngoài ra, có thể đăng xuất tất cả mọi người trừ người dùng hiện tại vào nửa đêm không?

Máy tính nằm trong mạng miền Windows - mặc dù tôi chỉ muốn đăng xuất tự động hoạt động cho một máy (và tôi không phải là quản trị viên mạng)

.


1
Đây có phải là một mạng miền Windows?
Moab

@Moab: Máy tính nằm trong mạng miền Windows - mặc dù tôi chỉ muốn đăng xuất tự động hoạt động cho một máy (và tôi không phải là quản trị viên mạng).
Jonas

@ Jonas, Sự lựa chọn từ ngữ của bạn làm cho nó giống như nhiều PC, bạn có thể chỉnh sửa bài đăng gốc của mình để đưa thông tin mới này.
Moab

@Moab: Tôi đã cố gắng làm rõ câu hỏi. Điều đó có tốt hơn không?
Jonas

Bây giờ, có một cái nhìn.
Moab

Câu trả lời:


6

Để đăng xuất người dùng bị ngắt kết nối trong khi vẫn kết nối người dùng hiện tại, hãy sao chép mã tập lệnh sau vào tệp .cmd, chẳng hạn như "Log OfferUsers.cmd" và sau đó chạy dưới dạng dịch vụ vào nửa đêm:

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

Kịch bản hoạt động bằng cách sử dụng lệnh truy vấn để tìm người dùng bị ngắt kết nối bằng cách tìm kiếm cụm từ "đĩa", sau đó đăng xuất chúng.

Nếu bạn muốn tập lệnh thay vì chạy liên tục như một dịch vụ, hãy đăng xuất người dùng khi họ bị ngắt kết nối / không hoạt động trong một khoảng thời gian nhất định, thay vào đó bạn sẽ sử dụng:

@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

Tập lệnh này sử dụng cùng một lệnh truy vấn, nhưng cũng kiểm tra thêm phần "IDLE TIME" của kết quả, đăng xuất người dùng nếu thời gian nhàn rỗi lớn hơn 32 ("GTR 32"). Cụm từ đó xảy ra hai lần vì mã thông báo "IDLE TIME" có thể xảy ra hai vị trí hơi khác nhau. Sau đó, dòng bắt đầu bằng "sự lựa chọn" đợi 2 phút trước khi thực hiện lại thao tác bằng cách lặp lại từ đầu. Bạn có thể tăng hoặc giảm giá trị "32" theo nhu cầu của mình.

Tìm thấy ở đây .


@eMansipater: Bạn có phiền giải thích điều này không, và nơi tôi có thể đặt 24 giờ?
Jonas

1
Giải pháp tốt nhất là vô hiệu hóa chuyển đổi người dùng nhanh, điều này sẽ buộc đăng xuất trước khi người dùng mới có thể đăng nhập vào tài khoản của họ.
Moab

1
@Moab vô hiệu hóa chuyển đổi người dùng nhanh có nghĩa là người không phải quản trị viên không thể đăng nhập nếu người dùng trước đó đã khóa màn hình. @Jonas Một câu hỏi khôn ngoan-- bit trong ngoặc đơn đang sử dụng lệnh truy vấn từ support.microsoft.com/kb/186592 để tìm người dùng bị ngắt kết nối bằng cách tìm kiếm cụm từ "đĩa", sau đó đăng xuất chúng. Lệnh lựa chọn đang chờ để chỉ thực hiện thao tác cứ sau 2 phút. Không cần tùy chọn 24 giờ vì tập lệnh này chỉ nên đăng xuất người dùng nếu người dùng khác đã đăng nhập.
eMansipater

1
@Jonas một tệp bó sử dụng "%% a", nhưng để thực hiện điều tương tự tại dòng lệnh, bạn nhập "% a" thay vào đó - điều đó sẽ giúp gỡ lỗi. Tôi không có máy Windows tiện dụng để thử tập lệnh, vì vậy có thể có lỗi gì đó với nó. Bạn có thể thử thay đổi các lệnh "GTR 32 (logoff %% b)" thành "echo logoff %% b" mà không có dấu ngoặc kép hoặc "echo logoff% b" mà không có dấu ngoặc kép nếu gõ nó vào. Bằng cách đó, nó sẽ in ra người dùng nó đang cố gắng đăng xuất. Nếu nó in rác hoặc không có gì nó sẽ hiển thị tập lệnh bị sai. Tôi sợ rằng tôi không biết định dạng đầu ra "truy vấn" để kiểm tra nó.
eMansipater

1
@Jonas Tôi đã có cơ hội nhân đôi đầu ra của lệnh truy vấn và các phần của tập lệnh để việc đăng xuất sẽ chỉ xảy ra nếu người dùng không sử dụng trong một khoảng thời gian đã đặt. 'if %% d GTR 32' có nghĩa là chạy lệnh đăng xuất nếu mã thông báo %% d lớn hơn 32. Tùy thuộc vào việc sử dụng máy tính để bàn từ xa, v.v., mã thông báo "nhàn rỗi" có thể xuất hiện ở hai nơi, đó là lý do tại sao tập lệnh kiểm tra cho cả hai kịch bản. Phiên bản sửa đổi của bạn chỉ cần đăng xuất bất kỳ người dùng nhàn rỗi nào cho dù nó đã tồn tại bao lâu. Nếu tôi có thể truy cập vào một máy Windows, tôi có thể xác minh cú pháp.
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))

Lưu ý rằng ở trên sẽ chỉ hoạt động trong vài phút nhàn rỗi, bạn cần sửa đổi một chút cho nó nếu bạn muốn sử dụng hàng giờ trong thời gian rảnh trước khi đăng xuất phiên bị ngắt kết nối.

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

Thay đổi 23 để điều chỉnh giờ, ở trên sẽ làm việc trong 24 giờ hoặc nhiều hơn thời gian nhàn rỗi. %% h 2012 đảm bảo giá trị %% d là một giờ chứ không phải giá trị phút.


0

Tôi sẽ tìm cách vô hiệu hóa tính năng "Chuyển người dùng". Điều này có thể giúp.


Tôi thực sự thích tính năng "chuyển đổi người dùng": theo cách này, ai đó chạy một phép tính dài cũng không chặn người dùng khác sử dụng máy tính.
Jonas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.