Automação Total: Instalação e Configuração do RustDesk via PowerShell
Em muitos ambientes corporativos, a instalação manual de ferramentas de suporte remoto como o RustDesk pode ser demorada e sujeita a erros. Pensando nisso, automatizei a instalação e configuração através de um script PowerShell.
01O que o script faz
Ele instala, atualiza e configura o RustDesk de forma silenciosa, aplicando automaticamente as definições de servidor, chave, senha, parâmetros de segurança e outros opcionais que considero válidos. Executa 10 etapas principais:
- Verificação da versão instalada
- Criação do diretório temporário (
C:\Temp) - Download e instalação silenciosa
- Configuração automática via arquivo TOML
- Reinício do serviço RustDesk
- Aplicação da senha de acesso remoto permanente
- Habilita o Auto Update
- Habilita a edição das configurações do RustDesk quando acessado remotamente
- Define a exibição como Escala Adaptada
- Validação e logs
02Benefícios da automação
- Padronização — todas as máquinas recebem a mesma configuração.
- Segurança — define automaticamente a chave e senha de acesso.
- Velocidade — instala e configura em menos de 2 minutos.
- Auditoria — cada ação é registrada no log (
C:\Temp\rustdesk_script.log). - Escalabilidade — pode ser adaptado para execução remota via GPO, Intune ou scripts de implantação em massa.
As configurações usadas no script se baseiam nas definições que particularmente prefiro e que trazem o melhor resultado nos meus ambientes.
03Como usar
- Copie o script completo e salve como
install_rustdesk.ps1. - Execute no PowerShell com privilégios de administrador.
- O log detalhado será salvo em
C:\Temp\rustdesk_script.log.
Dica de ouro: se salvar o script em um site próprio, basta chamá-lo para executar direto no PowerShell como admin:
irm https://seusite.com.br/rustdesk_install.ps1 | iex
04O script
rustdeskKey, senha, servidor de rendezvous/relay são placeholders genéricos — substitua pelos dados do seu próprio servidor RustDesk antes de usar.
# ==== Error Handling and Global Variables ====
$ErrorActionPreference = 'SilentlyContinue' # Suppress non-terminating errors
$logFile = "C:\Temp\rustdesk_script.log"
# ==== Required Version and Paths ====
$requiredVersion = "1.4.2"
$rustdeskDownload = "https://github.com/rustdesk/rustdesk/releases/download/1.4.2/rustdesk-1.4.2-x86_64.exe"
$installTempPath = "C:\Temp\rustdesk.exe"
$rustdeskExePath = "C:\Program Files\RustDesk\rustdesk.exe"
$rustdeskLogDir = "$env:APPDATA\RustDesk\log"
$userConfigPath = "C:\Users\$env:USERNAME\AppData\Roaming\RustDesk\config\RustDesk2.toml"
$serviceConfigPath = "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml"
# Key (Base64) e Password (texto plano) - PLACEHOLDERS GENÉRICOS
$rustdeskKey = 'BASE64_KEY_HERE'
$rustdeskPasswordPlain = 'AQUI COLOQUE SUA SENHA PERMANENTE'
# ==== Logging Function ====
function Write-Log {
param([string]$message)
$ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$ts - $message" | Out-File -Append -FilePath $logFile
}
Write-Log "==== Script Start ===="
# ==== 0) Check Installed Version ====
$skipInstall = $false
if (Test-Path $rustdeskExePath) {
try {
$versionInfo = (Get-Command $rustdeskExePath).FileVersionInfo
$installedVersion = $versionInfo.ProductVersion
Write-Log "RustDesk detected. Installed version: $installedVersion"
if ([version]$installedVersion -ge [version]$requiredVersion) {
Write-Log "RustDesk is already at the required version ($requiredVersion) or higher. Skipping installation."
$skipInstall = $true
} else {
Write-Log "Installed version ($installedVersion) is lower than required ($requiredVersion). Updating."
}
} catch {
Write-Log "Failed to retrieve installed version. Proceeding with installation."
}
} else {
Write-Log "RustDesk is not installed. Proceeding with installation."
}
# ==== 1) Create Temporary Directory ====
if (-not (Test-Path "C:\Temp")) {
New-Item -ItemType Directory -Path "C:\Temp" -Force | Out-Null
Write-Log "Temporary directory created."
}
if (-not $skipInstall) {
# ==== 2) Download and Install RustDesk ====
Write-Log "Downloading RustDesk $requiredVersion..."
Invoke-WebRequest -Uri $rustdeskDownload -OutFile $installTempPath
Write-Log "Download completed."
Write-Log "Installing RustDesk..."
Start-Process -FilePath $installTempPath -ArgumentList "--silent-install" -PassThru | Wait-Process
Write-Log "Installation completed."
Start-Sleep -Seconds 5
# ==== 3) Stop RustDesk Service and Processes ====
Write-Log "Stopping RustDesk service..."
net stop rustdesk | Out-Null
Get-Process rustdesk -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
}
# ==== 4) Generate and Apply TOML Configuration ====
$toml = @"
rendezvous_server = 'AQUI COLOQUE SEU SERVIDOR:21116'
nat_type = 1
serial = 0
[options]
av1-test = 'Y'
allow-remote-config-modification = 'Y'
relay-server = 'AQUI COLOQUE SEU SERVIDOR'
allow-auto-update = 'Y'
key = 'AQUI COLOQUE SUA KEY'
custom-rendezvous-server = 'AQUI COLOQUE SEU SERVIDOR'
verification-method = 'use-permanent-password'
"@
$defaultToml = @"
[options]
view_style = 'adaptive'
"@
foreach ($path in @($userConfigPath, $serviceConfigPath)) {
$dir = Split-Path $path
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir -Force | Out-Null
Write-Log "Directory $dir created."
}
# Escreve o RustDesk2.toml
Set-Content -Path $path -Value $toml -Encoding UTF8
Write-Log "TOML configuration written to $path."
# Escreve o RustDesk_default.toml
$defaultPath = Join-Path -Path $dir -ChildPath "RustDesk_default.toml"
Set-Content -Path $defaultPath -Value $defaultToml -Encoding UTF8
Write-Log "Default TOML configuration written to $defaultPath."
}
# ==== 5) Start RustDesk Service ====
Write-Log "Starting RustDesk service..."
net start rustdesk | Out-Null
Start-Sleep -Seconds 5
# ==== 6) Set Access Password ====
Write-Log "Setting RustDesk access password..."
Start-Process -FilePath $rustdeskExePath -ArgumentList "--password", $rustdeskPasswordPlain -Wait
Start-Sleep -Seconds 5
# ==== 7) Validate Configuration in Logs ====
Write-Log "Validating password configuration in logs..."
if (Test-Path $rustdeskLogDir) {
$logs = Get-ChildItem -Path $rustdeskLogDir -Filter "*.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 3
$found = $false
foreach ($log in $logs) {
if (Select-String -Path $log.FullName -Pattern "password") {
Write-Log "Password entry found in $($log.Name)."
Write-Output "Password set successfully (verified in $($log.Name))."
$found = $true
break
}
}
if (-not $found) {
Write-Log "No password entry found in recent logs."
Write-Output "Aviso: Nenhuma confirmacao de senha detectada nos logs."
}
} else {
Write-Log "RustDesk log directory not found: $rustdeskLogDir"
Write-Output "Diretorio de log do RustDesk nao encontrado."
}
Write-Log "==== Script End ===="
Write-Output "Script completo. Check $logFile para mais detalhes."
05Conclusão
Com esse script, a implantação do RustDesk em ambientes corporativos deixa de ser manual e sujeita a erro, passando a ser padronizada, auditável e escalável — podendo ser distribuída via GPO, Intune ou scripts de implantação em massa.
Quer padronizar o suporte remoto na sua empresa?
Implanto e automatizo ferramentas de acesso remoto seguras, com auditoria e distribuição em massa.
Falar com a Snake Tech