Proxy por Usuário no Terminal Services (RDS) Usando PowerShell e HKCU

No ambiente Windows Server com Terminal Services (RDS), é comum precisar restringir o uso de proxy a alguns usuários específicos, sem afetar todos os demais logados no mesmo servidor.
Quando aplicações críticas dependem de internet e todos usam a mesma máquina, a configuração global via GPO ou script universal não é viável, pois quebraria funcionalidades ou afetaria usuários que não deveriam ter proxy.

Aqui vamos mostrar uma solução prática: script PowerShell que aplica proxy apenas a usuários autorizados, utilizando o HKCU, rodando no logon do usuário.


1. Conceito da solução

  • Usamos o HKCU para configurar o proxy no perfil do usuário, evitando impacto global.
  • O script verifica se o usuário logado pertence a uma lista de permitidos antes de aplicar o proxy.
  • Funciona para apps que respeitam as configurações de usuário (WinINET, navegadores).
  • Apps que rodam como SYSTEM ou serviços não são afetados — o que mantém o ambiente seguro para aplicações críticas.

2. Criando a lista de usuários permitidos

No próprio servidor, você pode criar um arquivo .txt com os logins autorizados:

C:\Scripts\usuarios_proxy.txt

usuario1
usuario2
administrador

Cada linha corresponde ao username do Windows (não precisa domínio aqui, funciona com login local ou AD se o usuário logar corretamente).


3. Script PowerShell inteligente

C:\Scripts\Set-Proxy.ps1:

# Caminho do arquivo com usuários permitidos
$usuariosPermitidos = "C:\Scripts\usuarios_proxy.txt"

# Ler lista de usuários
$permitidos = Get-Content $usuariosPermitidos

# Obter o usuário logado
$usuarioAtual = $env:USERNAME

# Verificar se o usuário está na lista
if ($permitidos -contains $usuarioAtual) {
    # Ativar proxy
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 1
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -Value "proxy.seudominio.local:3128"
    Write-Output "Proxy ativado para $usuarioAtual"
} else {
    # Desativar proxy
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 0
    Write-Output "Proxy não aplicado para $usuarioAtual"
}

4. Associando o script ao logon do usuário

Se houver AD:

  1. Copie o script para \\seuservidor\netlogon\Set-Proxy.ps1
  2. Abra Active Directory Users and Computers → usuário → Properties → Profile → Logon Script
  3. Chame o PowerShell:
powershell.exe -ExecutionPolicy Bypass -File \\seuservidor\netlogon\Set-Proxy.ps1

Se for local (sem AD):

  1. Abra gpedit.mscUser Configuration → Windows Settings → Scripts (Logon/Logoff) → Logon
  2. Adicione o comando acima.

Isso garante que cada usuário que logar terá o script rodando apenas no seu contexto, ativando ou não o proxy conforme a lista.


5. Testando

  1. Logue com um usuário da lista:
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select-Object ProxyEnable, ProxyServer
  • ProxyEnable = 1 e ProxyServer = proxy.seudominio.local:3128 → OK
  1. Logue com usuário fora da lista:
  • ProxyEnable = 0 → OK, nenhum impacto.

6. Vantagens dessa abordagem

  • Controle centralizado: basta editar o arquivo usuarios_proxy.txt.
  • Não afeta outros usuários no mesmo servidor TS.
  • Sem necessidade de GPO complexa, filtragem ou autenticação no domínio.
  • Seguro para aplicações críticas que dependem de internet no servidor, pois elas usam conexão global.

💡 Resumo:
Com esse esquema, você mantém o TS funcionando normalmente, aplica proxy só para quem precisa, e consegue gerenciar tudo por uma lista de usuários, sem dor de cabeça com AD, OU ou GPOs complexas.

Rolar para cima