SNAKE_TECH blog · rustdesk

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:

  1. Verificação da versão instalada
  2. Criação do diretório temporário (C:\Temp)
  3. Download e instalação silenciosa
  4. Configuração automática via arquivo TOML
  5. Reinício do serviço RustDesk
  6. Aplicação da senha de acesso remoto permanente
  7. Habilita o Auto Update
  8. Habilita a edição das configurações do RustDesk quando acessado remotamente
  9. Define a exibição como Escala Adaptada
  10. 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

  1. Copie o script completo e salve como install_rustdesk.ps1.
  2. Execute no PowerShell com privilégios de administrador.
  3. 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

Os campos 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.

Artigo originalmente publicado no LinkedIn Pulse por Alfredo Eduardo da Silva.
[ ESPAÇO RESERVADO — ANÚNCIO GOOGLE ADSENSE ]

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