在 PowerShell 中注销远程会话

Marion Paul Kenneth Mendoza 2022年6月15日
在 PowerShell 中注销远程会话

作为组织的管理员,在特定服务器或工作站可能会遇到性能下降的工作场所中,这是一个常见问题。

这种情况通常是由多个用户远程连接到机器引起的,特别是如果这是一个共享工作站。但是,大多数远程连接的用户没有正确注销,只是点击了远程桌面连接或 RDP 上的关闭按钮。

如果用户没有从机器上正确注销,他们的配置文件将保持活动状态并占用资源。作为管理员,我们可以通过执行注销操作来解决此问题。

本文将讨论我们如何使用命令行和 PowerShell 注销远程用户。

在 PowerShell 中注销远程会话

以编程方式注销远程会话很容易。但是,在此用例中,最好使用旧命令而不是内置的 PowerShell 命令模块。

例如,PowerShell 模块 Invoke-RDUserLogoff 命令有其局限性,例如只能在加入域的计算机和操作系统 Windows Server 2012 R2 或 8.1 及更低版本上执行。

现在,让我们关注几个遗留的命令来注销远程用户,这些命令直到今天仍然被广泛使用。

注销 命令

logoff 命令将终止用户在本地或远程服务器或工作站中的当前会话。如果我们使用下面的代码运行帮助命令,我们可以看到 logoff cmdlet 使用了一些参数,例如会话名称或 id 以及服务器名称,它们都很重要。

示例代码:

logoff /?

输出:

LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]

如果我们已经知道要定位哪个服务器,我们怎么知道那台机器上的当前会话?然后我们将使用查询用户命令或 quser

使用 quser 命令查询用户会话

现在,尝试使用下面的代码片段在你的本地计算机上运行 quser

示例代码:

quser

输出:

USERNAME              SESSION NAME        ID  STATE   IDLE TIME  LOGON TIME
>marion               console             1  Active      none   6/10/2022 5:56 AM

运行 quser 命令将显示你计算机上的所有当前会话。但是,我们如何在不实际登录到该服务器的情况下隔离远程服务器上特定用户的会话 ID?

请记住,我们可以在以远程计算机为目标时在本地执行 quser 命令。它所需要的只是一个有权远程连接到计算机的管理员帐户。

从这一点开始,我们将需要 Windows PowerShell。

我们将需要 PowerShell 来执行下面的代码片段,以执行诸如 -split 之类的字符串操作。此外,下面的输出将显示用户的会话 ID,我们需要它作为 logoff 命令的参数。

示例代码:

((quser /server:RDP01 | ? { $_ -match "marion" }) -split ' +')[3]

输出:

1

值得注意的是,我们可以在 PowerShell 中运行旧命令,例如 quserlogoff。因此,从这里开始,我们现在将使用 PowerShell 终端而不是命令提示符作为我们的解释器。

使用 quserlogoff 命令注销用户

现在我们知道如何在不建立计算机远程会话的情况下获取用户的会话 ID,我们可以在 PowerShell 中组合所有命令。我们可以以下面的代码片段为例。

Set-Alias Query-User quser
Set-Alias Logoff-User logoff

$serverName   = 'RDP01'
$userName = 'marion'

$sessionID = ((Query-User /server:$serverName | ? { $_ -match $userName }) -split ' +')[3]

Logoff-User $sessionID /server:$serverName

如你所见,我们为 quserlogoff 命令创建了新别名。此步骤是可选的,但我们这样做是为了通过使用动词-名词命令格式让自己更加沉浸在 PowerShell 脚本中。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell Log