2013-01-17 4 views

Odpowiedz

3

Moim zdaniem, najprostszym sposobem byłoby wykorzystanie logoff.exe który już istnieje na komputerze. na przykład aby wylogować pierwszy odłączonego użytkownika w zrzucie:

logoff 3 /server:YOURSERVERNAME 
8

Nie mogę spróbować tego:

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

if ($pc) 
{ 
    $pc| % { 

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

    } 
} 
+0

Myślę, że to powinno zadziałać – EBGreen

+0

Używam tego lokalnie na serwerze "kiosku" dla działu IT (długa historia) i działa. Nigdy nie testowałem zdalnie, ale myślę, że może działać, ja też. –

+0

@ CB-Niedawno natknąłem się na ten sam problem, w którym muszę się wylogować wszystkich odłączonych użytkowników. Czy możesz mi powiedzieć, jak zaimplementować to i gdzie ostatnio zadałem to samo pytanie tutaj http://stackoverflow.com/ pytania/18377592/get-disconnected-users-and-logoff-them? – coder

1

Proszę bardzo:

@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

Dobra odpowiedź! Czy możesz wyjaśnić, co reprezentuje kilka zmiennych, takich jak STATUS? –

+1

STAN - wartość do wyszukania (Odłączony); STATUS - Wartość państwa wniesiona przez qwinsta; id - wartość identyfikatora wniesiona przez wqinsta; ROOT - jest pierwszym 12 znakami STATUSA –

+1

Pierwotnie ten skrypt był używany do zamykania otwartych plików według katalogu, więc do bieżącego zadania niektóre rzeczy naprawdę nie robią nic –

2

Oto wielki skryptów rozwiązanie do zdalnego logowania lub lokalnie. Używam qwinsta do pobierania informacji o sesji i budowania tablicy z danych wyjściowych. Ułatwia to iterację każdego wpisu i wylogowanie tylko rzeczywistych użytkowników, a nie samego systemu lub samego detektora RDP, który zwykle po prostu zgłasza błąd odmowy dostępu.

$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 
    } 
} 

W pierwszym wierszu skryptu należy podać $ serverName odpowiednią wartość lub localhost, jeśli działa lokalnie. Używam tego skryptu, aby wykopać użytkowników, zanim automatyczny proces spróbuje przenieść niektóre foldery. Zapobiega błędom "plik w użyciu". Inna uwaga: ten skrypt będzie musiał zostać uruchomiony jako administrator, w przeciwnym razie odmówiono dostępu do próby zalogowania się. Mam nadzieję że to pomoże!

Powiązane problemy