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:
- Desativar serviços desnecessários (seguro para VPS)
- Ajustar o Windows Update para não consumir recursos o tempo todo
- Otimizar o pagefile (memória virtual)
- Desativar recursos e funcionalidades não usados
- Ajustes adicionais de desempenho (TCP, energia, etc.)
- 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):
Painel de Controle → Sistema → Proteção do Sistema- 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
- Pressione
Win + X. - 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:
# ============================================================
# 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:
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 VPS | Pagefile fixo sugerido |
|---|---|
| 16–32 GB | 4–8 GB |
| 64+ GB | 8–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:
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:
- Abra
services.msc. - Localize Windows Update.
- 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:
Configurações → Sistema → Notificações e ações→ desative o que não usa.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:
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:
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
$cs = Get-WmiObject Win32_ComputerSystem
$cs.AutomaticManagedPagefile = $true
$cs.Put() | Out-Null
Depois, reinicie o servidor.
6.4. Reativar o TCP Autotuning
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.
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ê.