在 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 中运行旧命令,例如 quser
和 logoff
。因此,从这里开始,我们现在将使用 PowerShell 终端而不是命令提示符作为我们的解释器。
使用 quser
和 logoff
命令注销用户
现在我们知道如何在不建立计算机远程会话的情况下获取用户的会话 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
如你所见,我们为 quser
和 logoff
命令创建了新别名。此步骤是可选的,但我们这样做是为了通过使用动词-名词命令格式让自己更加沉浸在 PowerShell 脚本中。
相关文章
在 PowerShell 中管理服务
发布时间:2024/02/08 浏览次数:116 分类:编程语言
-
本文将讨论 PowerShell 服务 cmdlet、如何使用它们,并开发我们的脚本以在本地或远程管理多台计算机上的服务。
使用 PowerShell 获取 Windows 服务的启动类型
发布时间:2024/02/08 浏览次数:127 分类:编程语言
-
本教程将教你使用 PowerShell 获取启动类型的 Windows 服务。
PowerShell 中的属性 Property 与 ExpandProperty
发布时间:2024/02/08 浏览次数:198 分类:编程语言
-
本文将讨论什么是属性并将它们与扩展属性区分开来。Windows PowerShell 主要集中在显示和生成对象。这些对象由称为属性的特定细节支持。
PowerShell 中的 ExecutionPolicy Bypass 和 Unrestricted
发布时间:2024/02/08 浏览次数:137 分类:编程语言
-
提供了 PowerShell 执行策略作为安全措施。Bypass 和 Unrestricted 是两个重要的策略,可用于跳过几乎所有的安全检查并运行任何脚本。
使用 PowerShell 将文件从 Windows 复制到 Linux
发布时间:2024/02/08 浏览次数:125 分类:编程语言
-
本教程将教你使用 PowerShell 将文件从 Windows 复制到 Linux。
脚本执行后保持 PowerShell 控制台打开
发布时间:2024/02/08 浏览次数:111 分类:编程语言
-
本文将讨论多种解决方案,这些解决方案将使你的 PowerShell 控制台在脚本执行后保持打开状态,包括 NoExit 参数。