Sessão final quando o usuário se desconecta do servidor RDP do Windows 2008

3

Gostaria de começar dizendo que não sou de forma alguma um administrador de servidores de qualquer tipo. Basicamente eu sei mais sobre computadores, então agora eu consigo descobrir isso.

Nossa empresa tem um servidor RDP que 5 usuários se conectam remotamente. Não é um controlador de domínio (sem o Active Directory).

Meu problema é quando os usuários se desconectam da sessão RDP, a sessão do usuário não termina após um determinado período de tempo. Eu passei pela lista Usuários e configurei manualmente o campo 'Finalizar uma sessão desconectada' para 2 horas para cada usuário que eu queria terminar (nas Propriedades do usuário, na guia 'Sessões'). Em seguida, terminei cada sessão para que as novas propriedades se aplicassem na reconexão ao servidor. Eu também acabei de reiniciar o servidor apenas para ter certeza.

A razão pela qual estou fazendo isso é que todos os usuários, exceto um, devem ter suas sessões terminadas à meia-noite.

Passos que verifiquei:

Verifiquei se a configuração do Host da Sessão da Área de Trabalho Remota não estava substituindo as configurações do usuário. Para fazer isso, abri a janela Gerenciamento do servidor, expandi os 'Serviços de Área de Trabalho Remota', cliquei em 'Configuração do Host de Sessão RD', cliquei com o botão direito no meu servidor e fui para propriedades e exibi a guia 'Sessões'. Os campos "Substituir configurações do usuário" foram todos desmarcados.

Também verifiquei a configuração de 'Política de Grupo' abrindo gpedit.msc, indo em 'Configuração do Computador \ Modelos Administrativos \ Componentes do Windows \ Serviços de Área de Trabalho Remota \ Limites de Tempo da Sessão' e verificando se nenhuma dessas opções foi configurada (Não configurado).

Da minha pesquisa, essas seriam as duas configurações que substituiriam uma configuração de sessão do usuário. Mas parece que há outra coisa, pois um usuário pode permanecer no estado "Desconectado" indefinidamente com minhas configurações atuais. Se eu perdi alguma coisa, por favor, me aponte na direção certa.

Obrigado por qualquer contribuição / ajuda!

    
por That Guy 04.02.2016 / 00:54

1 resposta

1

Quando você acessa o Visualizador de eventos e navega para: Applications and Services Logs - > Microsoft - > Windows - > %código% e abra TerminalServices-LocalSessionManager você encontrará o evento 24 no Microsoft-Windows-TerminalServices-LocalSessionManager, que indicará Operational

Podemos usar isso como um gatilho para uma tarefa delayd no agendador de tarefas para executar um script que reconfigura todos os usuários desconectados e registra os resultados em um arquivo de log para que possamos investigar mais tarde.

Crie a tarefa no Agendador de Tarefas com esses detalhes configurados:

ARemoteDesktopServices:Sessionhasbeendisconnected:boxdaparteEditActiontemisso:

-ExecutionPolicyBypassc:\scripts\disconnect.ps1

Vocêteráquecriardoisdiretórios:

c:\scripts\
c:\logs\

Emseguida,crieumarquivoemc:\scriptschamadodisconnect.ps1eadicioneoconteúdoconformeabaixo:

disconnect.ps1:

#.SYNOPSIS # Checks for disconnected sessions and logs off the disconnected user sessions. #.DESCRIPTION # Checks for disconnected sessions and logs off the disconnected user sessions. #.NOTES # File Name: Logoff-DisconnectedSession.ps1 # Author : Bart Kuppens # Version : 1.1 #.EXAMPLE # PS > .\Logoff-DisconnectedSession.ps1 function Ensure-LogFilePath([string]$LogFilePath) { if (!(Test-Path -Path $LogFilePath)) {New-Item $LogFilePath -ItemType directory >> $null} } function Write-Log([string]$message) { Out-File -InputObject $message -FilePath $LogFile -Append } function Get-Sessions { $queryResults = query session $starters = New-Object psobject -Property @{"SessionName" = 0; "UserName" = 0; "ID" = 0; "State" = 0; "Type" = 0; "Device" = 0;} foreach ($result in $queryResults) { try { if($result.trim().substring(0, $result.trim().indexof(" ")) -eq "SESSIONNAME") { $starters.UserName = $result.indexof("USERNAME"); $starters.ID = $result.indexof("ID"); $starters.State = $result.indexof("STATE"); $starters.Type = $result.indexof("TYPE"); $starters.Device = $result.indexof("DEVICE"); continue; } New-Object psobject -Property @{ "SessionName" = $result.trim().substring(0, $result.trim().indexof(" ")).trim(">"); "Username" = $result.Substring($starters.Username, $result.IndexOf(" ", $starters.Username) - $starters.Username); "ID" = $result.Substring($result.IndexOf(" ", $starters.Username), $starters.ID - $result.IndexOf(" ", $starters.Username) + 2).trim(); "State" = $result.Substring($starters.State, $result.IndexOf(" ", $starters.State)-$starters.State).trim(); "Type" = $result.Substring($starters.Type, $starters.Device - $starters.Type).trim(); "Device" = $result.Substring($starters.Device).trim() } } catch { $e = $_; Write-Log "ERROR: " + $e.PSMessageDetails } } } Ensure-LogFilePath($ENV:LOCALAPPDATA + "\DisconnectedSessions") #$LogFile = $ENV:LOCALAPPDATA + "\DisconnectedSessions\" + "sessions_" + $([DateTime]::Now.ToString('yyyyMMdd')) + ".log" $LogFile = "c:\Logs\DisconnectedSessions\" + "sessions_" + $([DateTime]::Now.ToString('yyyyMMdd')) + ".log" [string]$IncludeStates = '^(Disc)$' Write-Log -Message "Disconnected Sessions CleanUp" Write-Log -Message "=============================" $DisconnectedSessions = Get-Sessions | ? {$_.State -match $IncludeStates -and $_.UserName -ne ""} | Select ID, UserName Write-Log -Message "Logged off sessions" Write-Log -Message "-------------------" foreach ($session in $DisconnectedSessions) { logoff $session.ID Write-Log -Message $session.Username } Write-Log -Message " " Write-Log -Message "Finished"

Sempre que uma sessão de usuário terminar e o evento de desconexão for registrado, o agendador de tarefas aguardará 2 minutos para executar o script e redefinir / desconectar todos os usuários desconectados.

Espero que isso ajude você.

    
por 18.08.2017 / 08:33

Tags