2013-01-17 18 views

risposta

3

A mio parere, il modo più semplice sarebbe quella di utilizzare logoff.exe già esistente sulla macchina. per esempio per disattivare il primo utente disconnesso nel tuo screenshot:

logoff 3 /server:YOURSERVERNAME 
8

non riesco a provare questo:

$pc = qwinsta /server:YourServerName | select-string "Disc" | select-string -notmatch "services" 

if ($pc) 
{ 
    $pc| % { 

    logoff ($_.tostring() -split ' +')[2] /server:YourServerName 

    } 
} 
+0

Penso che dovrebbe funzionare – EBGreen

+0

Lo uso localmente in un server "simile a un kiosk" per un dipartimento IT (una lunga storia) e funziona. Mai provato a distanza, ma penso che possa funzionare, anche io. –

+0

@ CB-I di recente mi sono imbattuto nello stesso problema in cui ho bisogno di disconnettere tutti gli utenti disconnessi. Così puoi dirmi come implementarlo e dove di recente ho fatto una stessa domanda qui http://stackoverflow.com/ domande/18377592/get-disconnected-users-and-logoff-them? – coder

1

Qui si va:

@echo off 
(set STATE=Disconnected) 
REM !! IMPORTANT set length in 4th from last line !! 

FOR /f "Skip=1 tokens=3,4" %%i in ('qwinsta') do (
IF /I NOT "%%i"=="The" (
call :checkpath %%i "%%j" 
) 
) 
::pause 
GOTO :EOF 

:checkpath 
set id=%1 
set STATUS=%~2 
:: !! The last number in the next line needs to 
:: be the length of the STATE string 

SET root=%STATUS:~0,12% 
IF /I NOT "%ROOT%"=="%STATE%" GOTO :EOF 
@echo on 
Session ID %ID% is %STATUS%. Logging off... 
@echo off 
logoff %ID% /server:YOURSERVERNAME 
+0

Buona risposta! Puoi spiegare ulteriormente quali sono alcune delle variabili, come STATUS che rappresentano? –

+1

STATE - valore da cercare (Disconnected); STATUS - Valore dello stato portato da qwinsta; id - valore dell'ID portato da wqinsta; ROOT - sono i primi 12 caratteri di STATUS –

+1

Originariamente questo script è stato utilizzato per chiudere i file aperti per directory, quindi per l'attività corrente alcune delle cose che non fanno nulla –

2

Ecco una grande soluzione con script per registrare le persone in remoto o localmente. Sto usando qwinsta per ottenere informazioni sulla sessione e costruire un array con l'output specificato. Ciò semplifica facilmente l'iterazione di ogni voce e disconnette solo gli utenti effettivi, e non il listener del sistema o RDP stesso che di solito genera comunque un errore di accesso negato.

$serverName = "Name of server here OR localhost" 
$sessions = qwinsta /server $serverName| ?{ $_ -notmatch '^ SESSIONNAME' } | %{ 
$item = "" | Select "Active", "SessionName", "Username", "Id", "State", "Type", "Device" 
$item.Active = $_.Substring(0,1) -match '>' 
$item.SessionName = $_.Substring(1,18).Trim() 
$item.Username = $_.Substring(19,20).Trim() 
$item.Id = $_.Substring(39,9).Trim() 
$item.State = $_.Substring(48,8).Trim() 
$item.Type = $_.Substring(56,12).Trim() 
$item.Device = $_.Substring(68).Trim() 
$item 
} 

foreach ($session in $sessions){ 
    if ($session.Username -ne "" -or $session.Username.Length -gt 1){ 
     logoff /server $serverName $session.Id 
    } 
} 

Nella prima riga di questo script assegnare $ serverName al valore appropriato o localhost se in esecuzione localmente. Uso questo script per cacciare gli utenti prima che un processo automatico tenti di spostare alcune cartelle. Impedisce errori "file in uso" per me. Un'altra nota, questo script dovrà essere eseguito come utente amministratore, altrimenti è possibile negare l'accesso cercando di registrare qualcuno. Spero che questo ti aiuti!

Problemi correlati