2013-01-17 59 views

回答

3

在我看來,最簡單的方法是使用已經存在你的機器上logoff.exe。比如在你的屏幕截圖註銷第一斷開的用戶:

logoff 3 /server:YOURSERVERNAME 
8

我不能嘗試這個辦法:

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

if ($pc) 
{ 
    $pc| % { 

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

    } 
} 
+0

我認爲應該可以工作 – EBGreen

+0

我在IT部門(長篇故事)的'kiosk-like'服務器中本地使用它,它可以工作。從來沒有遠程測試,但我認爲可以工作,我也是。 –

+0

@ CB-I最近遇到了同樣的問題,我需要登錄所有斷開連接的用戶。所以你可以說我如何實現這一點,最近我有一個問同樣的問題在這裏http://stackoverflow.com/問題/ 18377592/get-disconnected-users-and-logoff-them? – coder

1

在這裏你去:

@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

很好的答案!你能否進一步解釋一下幾個變量,例如STATUS是代表什麼? –

+1

STATE - 要查找的值(斷開連接); STATUS - qwinsta帶來的狀態值; id - 由wqinsta帶來的ID的值; ROOT - 是狀態的前12個字符 –

+1

最初這個腳本是用來通過目錄關閉打開的文件的,所以對於當前的任務,一些事情確實沒有做任何事情 –

2

這是一個偉大的腳本型解決方案用於遠程或本地登錄人員。我正在使用qwinsta獲取會話信息並從給定的輸出中構建一個數組。這使得迭代每個條目並僅註銷實際用戶非常容易,而不是系統或RDP偵聽器本身,它們通常只是拋出拒絕訪問錯誤。

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

在這個腳本的第一行給出$ SERVERNAME適當的值或本地主機,如果本地運行。我使用此腳本在用戶嘗試移動某些文件夾之前踢出用戶。爲我預防「使用中的文件」錯誤。另外需要注意的是,這個腳本必須以管理員用戶身份運行,否則您可能會被拒絕嘗試登錄某人。希望這可以幫助!

相關問題