Acabou sendo muito mais simples do que eu pensava. Simplesmente usando e publicando "logoff.exe" sob sys32 faz o mesmo trabalho sem a complexidade das permissões.
Eu tenho um serviço de área de trabalho remota em execução no Server 2012 R2. Minhas configurações de tempo limite foram definidas para encerrar uma sessão 60 minutos após a desconexão. Isso é bom para todos os usuários, exceto um: a sessão desse usuário precisa ser finalizada assim que ele for desconectado. Não consigo criar outra coleção porque não tenho um segundo host de sessão.
Eu decidi criar um arquivo em lote super simples que forçaria o usuário a efetuar logoff como este:
@ECHO off
logoff f
Isso, por algum motivo, requer privilégios de administrador e exibe o prompt de elevação. Então está fora de questão neste momento.
Em seguida, criei um script de powershell como este:
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
Novamente, isso requer direitos de administrador e não funcionará também. Funciona para administradores, mas também para usuários comuns.
Alguém tem uma ideia de como posso conseguir isso?
Você não poderia adicionar isso ao agendador de tarefas com privilégios elevados e executá-lo quando necessário? Use um ID de evento que é acionado quando o usuário se desconecta dos Serviços de Termo para executar seu script. Isso deve ser executado após a desconexão e porque você pode fornecer credenciais de administrador para a tarefa, ele deve ser executado sem acionar um prompt do UAC.
Não tenho certeza de qual é o ID do evento, mas tenho certeza de que há algo nos registros que o registra, mas talvez seja necessário ativar o registro.