Este guia serve para otimizar ao máximo um Windows Server (2012, 2012 R2, 2019 ou 2022) rodando como VPS, desativando serviços desnecessários, ajustando recursos do sistema e melhorando a fluidez — especialmente em máquinas com bastante RAM, mas que travam por causa de serviços, atualizações e configurações padrão.

Avisos importantes

  • Este guia é focado em VPS (servidor virtual, sem impressora local, sem áudio, sem desktop pesado).
  • Sempre faça um backup ou snapshot da VPS antes de aplicar mudanças em produção.
  • O script cria automaticamente um backup dos serviços em C:\services-backup-*.csv.
  • Após aplicar as mudanças, reinicie o servidor.
  • Se você usa funções específicas (domínio AD, impressão em rede, iSCSI, RDS, etc.), alguns serviços podem ser necessários. Ajuste conforme seu caso.

1 Visão geral do que será feito

O guia cobre:

  1. Desativar serviços desnecessários (seguro para VPS)
  2. Ajustar o Windows Update para não consumir recursos o tempo todo
  3. Otimizar o pagefile (memória virtual)
  4. Desativar recursos e funcionalidades não usados
  5. Ajustes adicionais de desempenho (TCP, energia, etc.)
  6. Como reverter se algo der errado

Funciona para: Windows Server 2012 / 2012 R2, Windows Server 2019 e Windows Server 2022.

Em 2016 também funciona, mas o foco aqui é 2012 / 2019 / 2022. Serviços que não existirem na sua versão são simplesmente ignorados pelo script.

2 Preparação

2.1. Acessar o servidor

  • Acesse via RDP (Área de Trabalho Remota) ou pelo console da VPS.
  • Faça login como Administrador.

2.2. Criar ponto de restauração / snapshot (recomendado)

Se o seu provedor de VPS permitir, crie um snapshot da máquina antes de começar. No próprio Windows (se o volume C: tiver proteção ativada):

  1. Painel de Controle → Sistema → Proteção do Sistema
  2. Clique em Criar → dê um nome (ex.: Antes-Otimizacao) → aguarde.

Na BrasilFivemHost você consegue tirar snapshot pelo painel antes de rodar o script — assim, se algo sair diferente do esperado, é só restaurar em segundos.

3 Script principal de otimização

Este script faz tudo de uma vez: cria backup dos serviços, desativa serviços desnecessários em VPS, coloca o Windows Update como Manual, ajusta o pagefile para tamanho fixo, remove recursos opcionais não usados (Windows Search, Backup, etc.) e aplica ajustes básicos de desempenho (energia e TCP).

3.1. Abrir o PowerShell como Administrador

  1. Pressione Win + X.
  2. Escolha Windows PowerShell (Admin) ou Terminal (Admin) (em versões mais novas).

Uma janela com "Administrador" no título será aberta.

3.2. Copiar e colar o script completo

Copie todo o bloco abaixo e cole de uma vez no PowerShell:

PowerShell
# ============================================================
# Otimização Completa para Windows Server 2012 / 2019 / 2022 em VPS
# Executar como Administrador
# ============================================================

# Garantir execução de scripts nesta sessão
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

# ============================================================
# 1. Backup dos serviços
# ============================================================
$backupPath = "C:\services-backup-$(Get-Date -Format 'yyyyMMdd-HHmmss').csv"
Get-Service | Select-Object Name, Status, StartType, DisplayName |
    Export-Csv -Path $backupPath -NoTypeInformation -Encoding UTF8
Write-Host "Backup de serviços salvo em: $backupPath" -ForegroundColor Cyan

# ============================================================
# 2. Lista de serviços para DESATIVAR (Disabled)
# ============================================================
$servicesToDisable = @(
    # Impressão / Fax
    'Spooler', 'Fax',
    # Busca e indexação
    'WSearch',
    # Arquivos offline
    'CscService',
    # Registro remoto
    'RemoteRegistry',
    # Logon secundário
    'Seclogon',
    # Tablet / Touch
    'TabletInputService', 'TabletServiceWacom',
    # Áudio
    'AudioSrv', 'AudioEndpointBuilder',
    # Temas e efeitos
    'Themes',
    # Superfetch / SysMain
    'SysMain',
    # Otimização de entrega (Delivery Optimization)
    'DoSvc',
    # Xbox / Jogos (se existir na imagem)
    'XblAuthManager', 'XblGameSave', 'XboxNetApiSvc',
    # Mapas offline
    'MapsBroker',
    # HomeGroup (legado, mas pode aparecer)
    'HomeGroupListener', 'HomeGroupProvider',
    # Localização
    'lfsvc',
    # Diagnósticos e telemetria
    'diagnosticshub.standardcollector.service', 'DiagTrack',
    'dmwappushservice', 'RetailDemo', 'WerSvc', 'PcaSvc', 'wercplsupport',
    # Smart Card (geralmente não usado em VPS)
    'SCardSvr', 'SCardCertSvc',
    # Armazenamento e sensores
    'StorSvc', 'SensorService', 'SensrSvc', 'WbioSrvc',
    # Insider / Parental / Telefone
    'wisvc', 'WpcMonSvc', 'PhoneSvc',
    # Bluetooth (quase nunca usado em VPS)
    'BthAvctpSvc', 'bthserv',
    # Infravermelho (legado)
    'irmon',
    # Ajuda e conta Microsoft
    'uhssvc', 'wlidsvc',
    # Windows Media Player Network Sharing
    'WMPNetworkSvc',
    # iSCSI (se não usar)
    'MSiSCSI', 'iscsiexe',
    # WinRM (se não usar PowerShell remoto / gerenciamento remoto)
    'WinRM',
    # Serviço de tempo (opcional; se não precisar de sincronia)
    'W32Time'
)

# Serviços que serão colocados como Manual (não desativar totalmente)
$servicesToManual = @(
    'wuauserv'   # Windows Update
)

# ============================================================
# 3. Funções para desativar e colocar como Manual
# ============================================================
function Disable-ServiceSafe {
    param([string]$serviceName)

    $svc = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
    if (-not $svc) {
        Write-Host "Serviço '$serviceName' não encontrado. Ignorando." -ForegroundColor Yellow
        return
    }

    try {
        if ($svc.Status -eq 'Running') {
            Stop-Service -Name $serviceName -Force -ErrorAction Stop
            Write-Host "Serviço '$serviceName' parado." -ForegroundColor Cyan
        }
        Set-Service -Name $serviceName -StartupType Disabled -ErrorAction Stop
        Write-Host "Serviço '$serviceName' desativado (Disabled)." -ForegroundColor Green
    }
    catch {
        Write-Host "Erro ao desativar '$serviceName': $($_.Exception.Message)" -ForegroundColor Red
    }
}

function Set-ServiceManual {
    param([string]$serviceName)

    $svc = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
    if (-not $svc) {
        Write-Host "Serviço '$serviceName' não encontrado. Ignorando." -ForegroundColor Yellow
        return
    }

    try {
        Set-Service -Name $serviceName -StartupType Manual -ErrorAction Stop
        Write-Host "Serviço '$serviceName' definido como Manual." -ForegroundColor Green
    }
    catch {
        Write-Host "Erro ao definir '$serviceName' como Manual: $($_.Exception.Message)" -ForegroundColor Red
    }
}

Write-Host "`n=== Desativando serviços desnecessários para VPS ===" -ForegroundColor Cyan
foreach ($svcName in $servicesToDisable) { Disable-ServiceSafe -serviceName $svcName }

Write-Host "`n=== Definindo serviços como Manual ===" -ForegroundColor Cyan
foreach ($svcName in $servicesToManual) { Set-ServiceManual -serviceName $svcName }

# ============================================================
# 4. Ajuste de Pagefile (memória virtual)
# ============================================================
Write-Host "`n=== Ajustando Pagefile ===" -ForegroundColor Cyan
try {
    # Desativar gerenciamento automático
    $cs = Get-WmiObject Win32_ComputerSystem
    $cs.AutomaticManagedPagefile = $false
    $cs.Put() | Out-Null

    # Pegar disco C:
    $pagefile = Get-WmiObject Win32_PageFileSetting -Filter "Name='C:\\pagefile.sys'" -ErrorAction SilentlyContinue

    if ($pagefile) {
        # Ajustar para tamanho fixo (exemplo: 4 GB fixo)
        $initialSize = 4096
        $maximumSize = 4096
        $pagefile.InitialSize = $initialSize
        $pagefile.MaximumSize = $maximumSize
        $pagefile.Put() | Out-Null
        Write-Host "Pagefile ajustado para tamanho fixo: $initialSize MB." -ForegroundColor Green
    }
    else {
        # Criar pagefile se não existir
        $pf = New-Object Management.ManagementClass("Win32_PageFileSetting")
        $pfArgs = $pf.CreateInstance()
        $pfArgs.Name = "C:\\pagefile.sys"
        $pfArgs.InitialSize = 4096
        $pfArgs.MaximumSize = 4096
        $pfArgs.Put() | Out-Null
        Write-Host "Pagefile criado com tamanho fixo: 4096 MB." -ForegroundColor Green
    }
}
catch {
    Write-Host "Erro ao ajustar pagefile: $($_.Exception.Message)" -ForegroundColor Red
}

# ============================================================
# 5. Remover recursos opcionais não usados (Features)
# ============================================================
Write-Host "`n=== Removendo recursos opcionais não usados ===" -ForegroundColor Cyan
$featuresToRemove = @(
    "Windows-Search-Service",
    "Windows-Backup",
    "Telnet-Client",
    "SNMP-Service",
    "BITS-Server",
    "Windows-Identity-Foundation",
    "NetFx3-Features",          # .NET 3.5 (remova se não usar)
    "Media-Playback",           # Windows Media Player
    "WorkFolders-Service"       # Work Folders
)

foreach ($feat in $featuresToRemove) {
    try {
        $f = Get-WindowsFeature -Name $feat -ErrorAction SilentlyContinue
        if ($f -and $f.Installed) {
            Remove-WindowsFeature -Name $feat -Remove -Restart:$false -ErrorAction Stop | Out-Null
            Write-Host "Feature '$feat' removida." -ForegroundColor Green
        }
        else {
            Write-Host "Feature '$feat' não instalada ou inexistente. Ignorando." -ForegroundColor Yellow
        }
    }
    catch {
        Write-Host "Erro ao remover feature '$feat': $($_.Exception.Message)" -ForegroundColor Red
    }
}

# ============================================================
# 6. Ajustes de energia (Performance)
# ============================================================
Write-Host "`n=== Ajustando plano de energia para Alto Desempenho ===" -ForegroundColor Cyan
try {
    powercfg -setactive SCHEME_MIN
    Write-Host "Plano de energia definido para Alto Desempenho." -ForegroundColor Green
}
catch {
    Write-Host "Erro ao ajustar plano de energia: $($_.Exception.Message)" -ForegroundColor Red
}

# ============================================================
# 7. Ajustes básicos de rede (TCP)
# ============================================================
Write-Host "`n=== Ajustes básicos de TCP ===" -ForegroundColor Cyan
try {
    # Para reativar depois: netsh interface tcp set global autotuninglevel=normal
    netsh interface tcp set global autotuninglevel=disabled | Out-Null
    Write-Host "Autotuning de TCP desativado." -ForegroundColor Green
}
catch {
    Write-Host "Erro ao ajustar TCP: $($_.Exception.Message)" -ForegroundColor Red
}

# ============================================================
# 8. Finalização
# ============================================================
Write-Host "`n=== Otimização concluída ===" -ForegroundColor Green
Write-Host "Reinicie o servidor para aplicar todas as mudanças com segurança." -ForegroundColor Yellow
Write-Host "Backup dos serviços: $backupPath" -ForegroundColor Cyan

3.3. Aguardar a execução

O script vai mostrar mensagens coloridas conforme executa cada etapa:

  • Verde: ação concluída com sucesso.
  • Amarelo: item não encontrado ou não instalado (normal, pode ignorar).
  • Vermelho: erro (anote a mensagem se aparecer).

Aguarde até aparecer a mensagem === Otimização concluída ===.

3.4. Reiniciar o servidor

Após o script terminar, reinicie pelo menu Iniciar ou pelo PowerShell:

PowerShell
Restart-Computer -Force

4 O que foi feito (resumo)

4.1. Serviços desativados

Principais categorias tratadas pelo script:

  • Impressão / Fax: Spooler, Fax
  • Busca / Indexação: WSearch
  • Áudio / Multimídia: AudioSrv, AudioEndpointBuilder, WMPNetworkSvc
  • Interface / Efeitos: Themes, Tablet*, Sensor*, Biometria
  • Telemetria / Diagnósticos: DiagTrack, WerSvc, PcaSvc, dmwappushservice…
  • Jogos / Xbox: Xbl*, XboxNetApiSvc
  • Rede / Armazenamento avançado: iSCSI, WinRM (se não usar)
  • Outros: Bluetooth, Mapas, HomeGroup, Smart Card, etc.

4.2. Serviços colocados como Manual

Windows Update (wuauserv) — para você controlar quando atualizar, em vez de o sistema baixar e instalar a qualquer momento.

4.3. Pagefile

Definido como tamanho fixo (ex.: 4 GB) em C:\pagefile.sys, o que evita crescimento dinâmico e fragmentação. Ajuste os valores conforme a sua RAM e o espaço em disco:

RAM da VPSPagefile fixo sugerido
16–32 GB4–8 GB
64+ GB8–16 GB (ou menos, dependendo do uso)

4.4. Recursos removidos (Features)

Dependendo da versão, podem ser removidos: Windows Search Service, Windows Backup, Telnet Client, SNMP Service, BITS Server, Windows Media Player, Work Folders e .NET 3.5 (se não usar). Se precisar de algum depois, reinstale via Server Manager → Add Roles and Features.

4.5. Energia e TCP

  • Plano de energia: Alto Desempenho.
  • TCP Autotuning: desativado (pode melhorar throughput em alguns VPS; se notar piora, reative depois).

Para reativar o TCP autotuning no futuro:

PowerShell
netsh interface tcp set global autotuninglevel=normal

5 Ajustes adicionais recomendados

5.1. Controlar melhor as atualizações

O script já colocou o Windows Update como Manual. Para controlar ainda mais:

  1. Abra services.msc.
  2. Localize Windows Update.
  3. Em Propriedades: tipo de inicialização Manual e serviço Parado (inicie só quando for atualizar).

5.2. Notificações e apps em segundo plano (2019/2022)

Em 2019/2022 com Desktop Experience:

  1. Configurações → Sistema → Notificações e ações → desative o que não usa.
  2. Configurações → Privacidade → Apps em segundo plano → desative apps desnecessários.

5.3. Verificar processos que mais usam RAM

Após reiniciar, identifique quem está consumindo memória:

PowerShell
Get-Process | Sort-Object WorkingSet -Descending |
    Select-Object -First 15 Name, @{N="RAM(MB)";E={[math]::Round($_.WorkingSet/1MB,2)}}

Se um processo específico (SQL, IIS, Java, agente de backup, antivírus) estiver usando muita RAM, ajuste a aplicação — não adianta só mexer no Windows.

6 Como reverter (se precisar)

6.1. Reativar serviços

O backup fica em C:\services-backup-*.csv. Abra o CSV e veja o StartType original. Exemplo para reativar o Spooler:

PowerShell
Set-Service -Name Spooler -StartupType Automatic
Start-Service -Name Spooler

6.2. Reinstalar features removidas

No Server Manager: Manage → Add Roles and Features → avance até Features → marque o que deseja (Windows Search, Backup, .NET 3.5, etc.) → instale e reinicie se solicitado.

6.3. Restaurar pagefile para automático

PowerShell
$cs = Get-WmiObject Win32_ComputerSystem
$cs.AutomaticManagedPagefile = $true
$cs.Put() | Out-Null

Depois, reinicie o servidor.

6.4. Reativar o TCP Autotuning

PowerShell
netsh interface tcp set global autotuninglevel=normal

7 Diferenças entre 2012 / 2019 / 2022

Windows Server 2012 / 2012 R2: tem menos serviços de telemetria e apps modernos. Alguns serviços da lista podem nem existir (o script ignora automaticamente). O foco principal fica em Spooler, Search, áudio, temas, iSCSI, WinRM e atualizações.

Windows Server 2019 / 2022: trazem mais serviços de telemetria e diagnósticos, apps modernos / Xbox (em imagens com Desktop Experience) e recursos de nuvem e sincronização. O script já trata todos esses serviços extras.

O mesmo script funciona nas três versões — serviços inexistentes são apenas ignorados com uma mensagem amarela.

8 Checklist rápido pós-otimização

Depois de reiniciar:

  • Verifique o uso de RAM no Gerenciador de Tarefas (deve estar mais estável).
  • Confirme que os serviços críticos continuam rodando com o comando abaixo.
  • Teste suas aplicações (IIS, SQL, Pterodactyl, WHMCS, bots, etc.).
  • Monitore por algumas horas/dias para garantir a estabilidade.
PowerShell
Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Running'} |
    Select-Object Name, Status

Precisa de uma VPS que já vem otimizada?

Nossas VPS Gamer no Brasil rodam em Ryzen 9, discos NVMe e proteção Anti-DDoS PRO — prontas para o seu projeto. E se travar em qualquer etapa deste guia, nosso suporte ajuda você.

Voltar para a Base de Conhecimento