Jak mogę automatycznie wylogować użytkowników z komputera z systemem Windows?

9

Chciałbym się upewnić, że ludzie są wylogowani, gdy skończą pracować na jednym, konkretnym komputerze dla wielu użytkowników. Obecnie następny użytkownik po prostu „zmienia użytkownika” i nadal działa, ale wielu użytkowników zalogowanych jednocześnie z otwartymi programami wydaje się zużywać zasoby.

Czy można automatycznie wylogować użytkowników z komputera, jeśli nie byli aktywni przez 24 godziny?


Alternatywnie, czy możliwe jest wylogowanie wszystkich oprócz bieżącego użytkownika o północy?

Komputer jest w sieci domeny Windows - chociaż chcę, aby automatyczne wylogowanie działało tylko na jednym komputerze (a nie jestem administratorem sieci)

.

Jonas
źródło
1
Czy to jest sieć domen Windows?
Moab
@Moab: Komputer jest w sieci domeny Windows - chociaż chcę, aby automatyczne wylogowanie działało tylko na jednym komputerze (i nie jestem administratorem sieci).
Jonas
@ Jonas, Twój wybór słów sprawia, że ​​brzmi jak więcej niż jeden komputer, możesz edytować swój oryginalny post, aby uwzględnić te nowe informacje.
Moab
@Moab: Próbowałem wyjaśnić pytanie. Czy to jest lepsze?
Jonas,
Teraz jest, spójrz.
Moab

Odpowiedzi:

6

Aby wylogować odłączonych użytkowników, pozostawiając bieżącego użytkownika podłączonego, skopiuj następujący kod skryptu do pliku .cmd, takiego jak „LogOffUsers.cmd”, a następnie uruchom go jako usługę o północy:

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

Skrypt działa przy użyciu polecenia query, aby znaleźć użytkowników rozłączonych, wyszukując frazę „dysk”, a następnie wylogowując się.

Jeśli zamiast tego chcesz, aby skrypt działał nieprzerwanie jako usługa, wylogowując użytkowników, gdy zostali odłączeni / nieaktywni przez pewien okres czasu, zamiast tego użyłbyś:

@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

Ten skrypt korzysta z tego samego polecenia zapytania, ale dodatkowo sprawdza część „CZASU GOTOWOŚCI” wyników, wylogowując użytkownika, jeśli czas bezczynności jest dłuższy niż 32 („GTR 32”). Ta fraza występuje dwukrotnie, ponieważ token „IDLE TIME” może występować w dwóch nieco różnych pozycjach. Następnie linia rozpoczynająca się od „wyboru” czeka 2 minuty przed ponownym wykonaniem operacji, zapętlając do początku. Możesz zwiększyć lub zmniejszyć wartość „32” w zależności od potrzeb.

Znaleziono tutaj .

eMansipater
źródło
@eMansipater: Czy mógłbyś wyjaśnić, co to robi i gdzie mogę ustawić 24 godziny?
Jonas
1
Najlepszym rozwiązaniem jest wyłączenie szybkiego przełączania użytkowników, co wymusi wylogowanie, zanim nowy użytkownik będzie mógł zalogować się na swoje konto.
Moab
1
@Moab wyłącza szybkie przełączanie użytkowników oznacza, że ​​nie-administrator nie może się zalogować, jeśli poprzedni użytkownik zablokował ekran. @Jonas Mądre pytanie - bit w nawiasach używa polecenia query z support.microsoft.com/kb/186592, aby znaleźć użytkowników, którzy są rozłączeni, wyszukując frazę „dysk”, a następnie wylogowując się. Polecenie wyboru oczekuje na wykonanie operacji tylko co 2 minuty. Nie ma potrzeby korzystania z opcji 24-godzinnej, ponieważ ten skrypt powinien wylogować użytkownika tylko wtedy, gdy zalogował się już inny użytkownik.
eMansipater
1
@Jonas plik wsadowy używa „%% a”, ale aby zrobić to samo w wierszu poleceń, wpisz „% a” - to powinno pomóc w debugowaniu. Nie mam pod ręką komputera z systemem Windows do wypróbowania skryptu, więc może być z nim coś nie tak. Możesz spróbować zmienić komendy „GTR 32 (wylogowanie %% b)” na „wyloguj echo %% b” bez cudzysłowów lub „wyloguj echo% b” bez cudzysłowów, jeśli je wpiszesz. W ten sposób wydrukuje użytkownicy próbują się wylogować. Jeśli wydrukuje śmieci lub nic, pokaże, że skrypt jest źle sformułowany. Obawiam się, że nie znam na pamięć formatu wyjściowego „zapytania”, aby to sprawdzić.
eMansipater,
1
@Jonas Miałem okazję dwukrotnie sprawdzić dane wyjściowe polecenia zapytania, a te części skryptu były takie, aby wylogowanie nastąpiło tylko wtedy, gdy użytkownik był bezczynny przez określony czas. „if %% d GTR 32” oznacza uruchomienie polecenia wylogowania, jeśli token %% d jest większy niż 32. W zależności od użycia zdalnego pulpitu itp. token „bezczynny” może pojawić się w dwóch miejscach, dlatego skrypt sprawdza oba scenariusze. Zmodyfikowana wersja po prostu wylogowuje każdego bezczynnego użytkownika, bez względu na to, jak długo to trwało. Jeśli mogę dostać się do komputera z systemem Windows, mogę zweryfikować składnię.
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))

Pamiętaj, że powyższe będzie działać tylko przez bezczynne minuty, musisz wprowadzić niewielką zmianę, jeśli chcesz wykorzystać godziny bezczynności przed wylogowaniem się z rozłączonej sesji.

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

Zmień 23, aby dostosować godziny, powyższe będzie działać przez 24 godziny lub dłużej w bezczynności. %% h 2012 zapewnia, że ​​wartość %% d to wartość godziny, a nie minuty.

TŁUM
źródło
0

Chciałbym znaleźć sposób na wyłączenie funkcji „Przełącz użytkownika”. To może pomóc.

Wizard Prang
źródło
Naprawdę podoba mi się funkcja „przełączania użytkownika”: w ten sposób ktoś, kto wykonuje długie obliczenia, nie blokuje również innym użytkownikom korzystania z komputera.
Jonas