In queste righe, che riteniamo possano essere utili ai più, vedremo insieme un percorso completo, pratico e ragionato, per distribuire OpenVPN Client, in modo singolo/manuale che sia, oppure in modo centralizzato in azienda.
Cercheremo di inserire di conseguenza una sorta di guida passo-passo descrivendo comunque i principi, le tecniche di automazione e i motivi per cui evitare il più possibile la gestione manuale.

Installazione diretta via Wizard
Procedura tipica:
- Scaricare il file installer da openvpn.net.
- Avviare l’MSI come amministratore, cliccando due volte e seguendo il wizard.
- Al termine copiare manualmente nella cartella C:\Program Files\OpenVPN\Config\ i file client.ovpn, i certificati (.crt, .key) e altri file eventualmente richiesti.
- Avviare OpenVPN GUI e caricare la configurazione.
Installazione automatica senza interazione
Una volta scaricato il file MSI (vedi sopra) risulta possibile usare il seguente comando tramite powershell avviato come amministratore:
msiexec.exe /i “OpenVPN-Install.msi” /qn /norestart /l*v “C:\openvpninstall.log”
- /i indica l’installazione, seguito dal percorso del file.
- /qn installazione silente (senza finestre).
- /norestart impedisce il riavvio automatico.
- /l*v produce un log dettagliato (utile per auditing).
Questa modalità permette di fare installazioni scriptate o remote ma rimane manuale se eseguita su singole postazioni.
Distribuzione automatica e centralizzata
Centralizzare l’installazione automatica di OpenVPN Client significa:
- Ridurre drasticamente gli errori manuali di configurazione.
- Garantire che ogni PC abbia versioni e parametri coerenti con le policy aziendali.
- Risparmiare tempo su onboarding, aggiornamenti e supporto.
- Tenere traccia, tramite log, di chi ha installato cosa e quando.
Con soluzioni GPO o RMM, puoi intervenire su decine o centinaia di PC in pochi minuti, senza che l’utente debba agire.
Propagazione tramite GPO (Group Policy)
Scenario: azienda con dominio Active Directory (AD).
Passaggi:
- Caricare l’installer MSI su una share accessibile dagli utenti.
- Creare un GPO per “Deployment software” e selezionare l’MSI (modalità assegnata o pubblicata).
- Prepara uno script (es. script di installazione silente via PowerShell menzionato sopra in sezione 2) che installa il tutto e copia file di configurazione e certificati nella cartella desiderata.
- Aggiungere una “Startup Script” tramite GPO per la copia dei file.
- In aggiunta: usare la sezione GPO “Registry” per iniettare nel registro di sistema la chiave utile alla disabilitazione del il salvataggio delle password.
Automazione avanzata via RMM: lo script Powershell pacchettizzato
Qui entra in gioco la massima automazione: lo script PowerShell può essere eseguito da una console RMM (Remote Monitoring and Management) — es. Datto RMM — su tutti i client selezionati, senza mai intervenire manualmente.
Dentro allo strumento di deploy, denominato “Component” in contesto Datto RMM, potranno essere inseriti sia script powershell, comprensivo di variabili, oltre che il file ZIP contenente file di configurazione e certificati.
Script Powershell e variabili:
###################################################################
# ==============================
# OpenVPN Install via Datto RMM
# ==============================
$TempPath = “C:\DATTORMM_TEMP\OVPN”
$ZipFile = Join-Path $PSScriptRoot “openvpn.zip”
$MsiFile = Join-Path $TempPath “OpenVPN-Install.msi”
$ConfigSrc = Join-Path $TempPath “Config”
$ConfigDst = “C:\Program Files\OpenVPN\Config”
# Variabile personalizzata da RMM
$EliminaConfig = $env:EliminaConfig # <- in Datto RMM puoi passare questa variabile (valore = “elimina”)
# Log con timestamp
$timestamplog = Get-Date -Format “yyyyMMdd_HHmmss”
$LogFile = “C:\DATTORMM_TEMP\openvpninstall_$timestamplog.log”
try {
# 1) Creazione cartella temporanea
if (!(Test-Path -Path $TempPath)) {
New-Item -Path $TempPath -ItemType Directory -Force | Out-Null
}
# 2) Estrazione del file ZIP
if (Test-Path $ZipFile) {
Expand-Archive -Path $ZipFile -DestinationPath $TempPath -Force
} else {
Write-Error “File $ZipFile non trovato nella stessa cartella dello script.”
exit 1
}
# 3) Installazione OpenVPN MSI
if (Test-Path $MsiFile) {
$proc = Start-Process -FilePath “msiexec.exe” `
-ArgumentList “/i `”$MsiFile`” /qn /norestart /l*v `”$LogFile`”” `
-Wait -PassThru
if ($proc.ExitCode -ne 0) {
Write-Error “L’installazione MSI è fallita. ExitCode: $($proc.ExitCode).”
exit $proc.ExitCode
} else {
Write-Output “Installazione MSI completata con successo.”
}
} else {
Write-Error “Installer MSI non trovato in $MsiFile”
exit 1
}
# 4) Copia cartella Config in destinazione (solo se MSI ok)
if (Test-Path $ConfigSrc) {
if (Test-Path $ConfigDst) {
if ($EliminaConfig -eq “elimina”) {
Write-Output “Eliminazione contenuto esistente in $ConfigDst richiesta.”
Remove-Item -Path (Join-Path $ConfigDst “*”) -Recurse -Force -ErrorAction SilentlyContinue
}
} else {
New-Item -Path $ConfigDst -ItemType Directory -Force | Out-Null
}
Copy-Item -Path (Join-Path $ConfigSrc “*”) -Destination $ConfigDst -Recurse -Force
Write-Output “Cartella Config copiata in $ConfigDst”
} else {
Write-Warning “Cartella Config non trovata in $ConfigSrc”
}
# 5) Impostazione Registro: disabilita salvataggio password
try {
$regPath = “HKLM:\Software\OpenVPN”
if (!(Test-Path $regPath)) {
New-Item -Path $regPath -Force | Out-Null
}
New-ItemProperty -Path $regPath -Name “disable_save_passwords” -PropertyType DWord -Value 1 -Force | Out-Null
Write-Output “Chiave di registro impostata: disable_save_passwords=1”
} catch {
Write-Warning “Errore durante la scrittura della chiave di registro: $_”
}
Write-Output “Installazione OpenVPN completata con esito positivo.”
}
finally {
# 6) Cleanup cartella temporanea
if (Test-Path $TempPath) {
Remove-Item -Path $TempPath -Recurse -Force -ErrorAction SilentlyContinue
Write-Output “Cartella temporanea $TempPath rimossa.”
}
}
exit 0
###################################################################
Struttura del file zip da includere in component
openvpn.zip
│
├── OpenVPN-Install.msi
└── Config\
├── client.ovpn
├── client.crt
├── client.key
└── (altri file…)
Funzionamento dello script contenuto nel component
Vediamo la logica tradotta in passaggi chiari:
- Crea la cartella temporanea per lavorare senza modificare subito il sistema.
- Estrae i file dello ZIP in quella cartella.
- Installazione silente di OpenVPN tramite MSI:
- Usa msiexec.exe con opzioni /qn /norestart /l*v, come sopra. Niente finestre!
- Produce file di log consultabile per debugging o audit.
- Copia la cartella Config in C:\Program Files\OpenVPN\Config\, sovrascrivendo i file vecchi se serve (controllato dalla variabile ambiente EliminaConfig).
- Imposta la chiave nel registro di sistema che impedisce il salvataggio password (disable_save_passwords=1).
- Rimuove la cartella temporanea, lasciando solo i file necessari in posizione.
ATTENZIONE! Nel caso foste interessati al Component contenente lo strumento di deploy powershell sentitevi liberi di contattarci all’indirizzo mail supporto@elovade.it!