我有一个在Server 2012 R2上运行的远程桌面服务。 我的超时设置已设置为在断开连接后60分钟结束会话。 除了一个用户外,这对所有的用户都有好处:只要他断开连接,那个用户的会话就必须结束。 我无法创build另一个集合,因为我没有第二个会话主机。
我决定创build一个超级简单的batch file,强制用户注销,例如:
@ECHO off logoff f
这,由于某种原因需要pipe理员权限,并提出了提升提示。 所以在这一点上是没有问题的。
然后我创build了一个像这样的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
同样,这需要pipe理员权限,不会工作。 它适用于pipe理员,但也适用于普通用户。
有没有人有一个想法,我可以做到这一点?
难道你不能用高级权限将它添加到任务调度器中,然后在需要时执行它吗? 使用用户从Term服务断开以运行脚本时触发的事件ID。 这应该在断开连接后执行,并且因为您可以向任务提供pipe理员凭据,所以应该在不触发UAC提示的情况下运行。
不知道该事件ID是什么,但我确定有logging它的日志中有东西,但您可能必须启用日志logging。
结果比我想象的要简单得多。 在sys32下简单地使用和发布“logoff.exe”就可以做到完全一样的工作,而不需要复杂的权限。