Come posso disconnettere automaticamente gli utenti da un computer Windows?


9

Vorrei assicurarmi che le persone siano disconnesse dopo aver lavorato su una singola macchina multiutente specifica. Attualmente, il prossimo utente "cambierà utente" e continuerà a funzionare, ma avere molti utenti connessi contemporaneamente con i programmi aperti sembra consumare risorse.

È possibile disconnettere automaticamente gli utenti da un computer se non sono attivi da 24 ore?


In alternativa, è possibile disconnettersi da tutti tranne l'utente corrente a mezzanotte?

Il computer si trova su una rete di dominio Windows, anche se voglio che il logout automatico funzioni per il singolo computer (e non sono l'amministratore di rete)

.


1
È una rete di domini Windows?
Moab,

@Moab: il computer si trova su una rete di dominio Windows, anche se voglio solo che il logout automatico funzioni per la singola macchina (e non sono l'amministratore di rete).
Jonas,

@ Jonas, La tua scelta di parole fa sembrare più di un PC, potresti modificare il tuo post originale per includere queste nuove informazioni.
Moab,

@Moab: ho provato a chiarire la domanda. Va meglio?
Jonas,

Ora è, dai un'occhiata.
Moab,

Risposte:


6

Per disconnettere gli utenti disconnessi lasciando l'utente corrente connesso, copiare il seguente codice di script in un file .cmd come "LogOffUsers.cmd" e quindi eseguirlo come servizio a mezzanotte:

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

Lo script funziona utilizzando il comando query per trovare gli utenti che sono disconnessi cercando la frase "disc", quindi disconnettendoli.

Se invece volessi che lo script venisse eseguito continuamente come servizio, disconnettendo gli utenti quando erano stati disconnessi / inattivi per un certo periodo di tempo, avresti invece usato:

@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

Questo script utilizza lo stesso comando query, ma controlla inoltre la parte "IDLE TIME" dei risultati, disconnettendo l'utente se il tempo di inattività è maggiore di 32 ("GTR 32"). Quella frase viene ripetuta due volte perché il token "IDLE TIME" può avere due posizioni leggermente diverse. Quindi la riga che inizia con "scelta" attende 2 minuti prima di eseguire nuovamente l'operazione eseguendo il loop all'inizio. Puoi aumentare o diminuire il valore "32" in base alle tue esigenze.

Trovato qui .


@eMansipater: ti dispiacerebbe spiegare cosa fa questo e dove posso impostare le 24 ore?
Jonas,

1
La soluzione migliore è disabilitare il cambio rapido dell'utente, questo forzerà la disconnessione prima che il nuovo utente possa accedere al proprio account.
Moab,

1
@Moab disabilitando il cambio rapido utente significa che un non amministratore non può accedere se l'utente precedente ha bloccato lo schermo. @Jonas Una domanda saggia: il bit tra parentesi sta usando il comando query da support.microsoft.com/kb/186592 per trovare utenti che sono disconnessi cercando la frase "disc", quindi disconnettendoli. Il comando di scelta è in attesa di eseguire l'operazione solo ogni 2 minuti. Non è necessaria l'opzione 24 ore poiché questo script dovrebbe disconnettere un utente solo se un altro utente ha già effettuato l'accesso.
eMansipater

1
@Jonas un file batch utilizza "%% a", ma per fare la stessa cosa alla riga di comando digita invece "% a", il che dovrebbe aiutare con il debug. Non ho una macchina Windows a portata di mano per provare lo script, quindi potrebbe esserci qualcosa di leggermente sbagliato. Potresti provare a cambiare i comandi "GTR 32 (logoff %% b)" in "echo logoff %% b" senza virgolette, oppure "echo logoff% b" senza virgolette se lo digiti. In questo modo verrà stampato il utenti che sta tentando di disconnettersi. Se stampa spazzatura o niente mostrerà che lo script non è corretto. Temo di non sapere "interrogare" il formato di output a memoria per verificarlo.
eMansipater,

1
@Jonas Ho avuto la possibilità di ricontrollare l'output del comando query e quelle parti dello script erano in modo che il logout si verificasse solo se l'utente fosse rimasto inattivo per un determinato periodo di tempo. 'if %% d GTR 32' significa eseguire il comando di disconnessione se il token %% d è maggiore di 32. A seconda dell'uso del desktop remoto, ecc., il token "inattivo" può apparire in due punti, motivo per cui lo script controlla entrambi gli scenari. La tua versione modificata disconnette semplicemente qualsiasi utente inattivo, non importa da quanto tempo. Se riesco ad accedere a un computer Windows, posso verificare la sintassi.
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))

Si noti che quanto sopra funzionerà solo per i minuti di inattività, è necessario apportare una leggera modifica se si desidera utilizzare ore di inattività prima di disconnettersi dalla sessione disconnessa.

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

Modificare le 23 per regolare le ore, quanto sopra funzionerà per 24 ore o più di tempo di inattività. %% h 2012 garantisce che il valore %% d sia un'ora e non un valore al minuto.


0

Vorrei cercare un modo per disabilitare la funzione "Cambia utente". Questo potrebbe aiutare.


In realtà mi piace la funzione "cambia utente": in questo modo, qualcuno che esegue un lungo calcolo non impedisce anche ad altri utenti di usare il computer.
Jonas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.