2013-01-17 29 views

Trả lời

3

Theo tôi, cách dễ nhất là nên sử dụng logoff.exe rằng đã tồn tại trên máy tính của bạn. ví dụ để log off người dùng bị ngắt kết nối đầu tiên trong ảnh chụp màn hình của bạn:

logoff 3 /server:YOURSERVERNAME 
8

tôi không thể thử điều này:

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

if ($pc) 
{ 
    $pc| % { 

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

    } 
} 
+0

Tôi nghĩ rằng nên làm việc – EBGreen

+0

tôi sử dụng này tại địa phương trong một máy chủ 'kiosk-like' cho một Lãnh thổ hải CNTT (một câu chuyện dài) và nó hoạt động. Không bao giờ thử nghiệm từ xa, nhưng tôi nghĩ rằng có thể làm việc, tôi quá. –

+0

@ CB-Tôi gần đây đã chạy vào cùng một vấn đề mà tôi cần phải đăng xuất khỏi tất cả những người dùng bị ngắt kết nối..Bạn có thể nói cho tôi cách thực hiện điều này và ở đâu gần đây tôi có một câu hỏi tương tự ở đây http://stackoverflow.com/ câu hỏi/18377592/get-disconnect-users-and-logoff-chúng? – coder

1

Ở đây bạn đi:

@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

Câu trả lời hay! Bạn có thể giải thích thêm một vài biến số, chẳng hạn như STATUS đang đại diện không? –

+1

STATE - giá trị cần tìm (Đã ngắt kết nối); TÌNH TRẠNG - Giá trị của nhà nước do qwinsta mang lại; id - giá trị của ID do wqinsta mang; ROOT - là 12 ký tự đầu tiên của STATUS –

+1

Nguyên bản tập lệnh này được sử dụng để đóng các tệp đang mở theo thư mục, do đó, đối với tác vụ hiện tại, một số điều thực sự không làm gì cả –

2

Dưới đây là một giải pháp kịch bản vĩ đại để ghi lại mọi người từ xa hoặc cục bộ. Tôi đang sử dụng qwinsta để lấy thông tin phiên và xây dựng một mảng ra khỏi đầu ra đã cho. Điều này làm cho nó thực sự dễ dàng để lặp qua từng mục và chỉ đăng xuất những người dùng thực tế, chứ không phải hệ thống hoặc người nghe RDP mà thường chỉ ném một lỗi truy cập bị từ chối.

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

Trong dòng đầu tiên của tập lệnh này cung cấp $ serverName giá trị thích hợp hoặc localhost nếu chạy cục bộ. Tôi sử dụng tập lệnh này để khởi động người dùng trước khi quá trình tự động tìm cách di chuyển một số thư mục. Ngăn chặn lỗi "sử dụng tệp" cho tôi. Một lưu ý, kịch bản này sẽ phải được chạy như một người dùng quản trị nếu không bạn có thể bị truy cập bị từ chối cố gắng để đăng xuất một ai đó. Hi vọng điêu nay co ich!

Các vấn đề liên quan