远程桌面服务上的注销脚本

远程桌面服务上的注销脚本

我在 Server 2012 R2 上运行远程桌面服务。我的超时设置已设置为断开连接后 60 分钟结束会话。这对所有用户都适用,但有一个用户除外:该用户的会话必须在断开连接后立即结束。我无法创建另一个集合,因为我没有第二个会话主机。

我决定创建一个超级简单的批处理文件,强制用户注销,如下所示:

@ECHO off
logoff f

由于某种原因,这需要管理员权限并会弹出提升权限提示。所以目前这是不可能的。

然后我创建了一个如下的 powershell 脚本:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
import-module RemoteDesktop
$name = [Environment]::Username
$session = get-rdusersession | Where-Object -Filter {$_.username -eq $name}
Invoke-RDUserLogoff -UnifiedSessionID $session.SessionID -HostServer $session.HostServer -Force

再次强调,这需要管理员权限,而且也不起作用。它对管理员有效,但对普通用户无效。

有人知道我该如何实现这个目标吗?

答案1

事实证明这比我想象的要简单得多。只需在 sys32 下使用和发布“logoff.exe”即可完成完全相同的工作,而无需复杂的权限。

答案2

您不能将其添加到具有提升权限的任务计划程序中,然后在需要时执行它吗?使用用户断开与 Term 服务的连接时触发的事件 ID 来运行您的脚本。该脚本应在用户断开连接后执行,并且由于您可以向任务提供管理员凭据,因此它应该在不触发 UAC 提示的情况下运行。

不确定该事件 ID 是什么,但我确信日志中有一些内容记录了它,但您可能必须启用日志记录。

相关内容