是否有一个 powershell 命令可以用来将“断开连接”的用户踢出服务器?一旦我知道踢单个用户的单行,我就可以编写脚本。
例如,我想踢掉下面对话框中看到的 8 个用户。
是否有一个 powershell 命令可以用来将“断开连接”的用户踢出服务器?一旦我知道踢单个用户的单行,我就可以编写脚本。
例如,我想踢掉下面对话框中看到的 8 个用户。
我不能试试这个:
$pc = qwinsta /server:YourServerName | select-string "Disc" | select-string -notmatch "services"
if ($pc)
{
$pc| % {
logoff ($_.tostring() -split ' +')[2] /server:YourServerName
}
}
在我看来,最简单的方法是使用你机器上已经存在的 logoff.exe。例如,在您的屏幕截图中注销第一个断开连接的用户:
logoff 3 /server:YOURSERVERNAME
这是一个很棒的脚本解决方案,用于远程或本地注销人员。我正在使用 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 提供适当的值或 localhost。我使用此脚本在自动过程尝试移动某些文件夹之前踢出用户。为我防止“文件正在使用”错误。另请注意,此脚本必须以管理员用户身份运行,否则您可能会在尝试注销某人时被拒绝访问。希望这可以帮助!
干得好:
@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