我有一个在 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
同样,这需要管理员权限并且也不起作用。它适用于管理员,但不适用于普通用户。
有人知道我如何做到这一点吗?
结果比我想象的要简单得多。只需在 sys32 下使用和发布“logoff.exe”即可完成完全相同的工作,而无需复杂的权限。
您不能将其添加到具有提升权限的任务计划程序中,然后在需要时执行它吗?使用当用户与术语服务断开连接时触发的事件 ID 来运行您的脚本。这应该在他们断开连接后执行,并且因为您可以为任务提供管理员凭据,所以它应该在不触发 UAC 提示的情况下运行。
不确定该事件 ID 是什么,但我确信日志中有记录它的内容,但您可能必须启用日志记录。