Script PowerShell per l’installazione di Sophos Connect 2.0 tramite GPO

Nel post Installazione Sophos Connect 2.0 tramite GPO avevo descritto una problematica legata al deploy dell’msi di Sophos Connect tramite GPO mediante la pubblicazione o l’assegnazione del package d’installazione come descritto in Use Group Policy to remotely install software – Windows Server | Microsoft Learn

A tal riguardo Sophos ha fornito l’indicazione che per il deploy di Sophos Connect tramite GPO è necessario utilizzare uno script di avvio computer (a riguardo si veda Working with startup, shutdown, logon, and logoff scripts using the Local Group Policy Editor | Microsoft Learn) e la procedura è stata descritta nella documentazione ufficiale, di seguito il riferimento alla versione corrente (ovvero Sophos Firewall v20) Install the Sophos Connect client through GPO – Sophos Firewall.

Nella seguente discussione Installing Sophos Connect msi – Feedback – Product Documentation Feedback – Sophos Community un membro del supporto tecnico conferma che è ancora consigliabile usare lo script al posto della pubblicazione per non avere problemi durante le reinstallazioni:

“After checking with our engineering team, I confirm you can use GPO for the installation but we don’t recommend it and advice to use scripts to avoid issues which comes with re-installations.
Therefore, we’ll leave the instructions unchanged as they are the best approach.”

Se però si analizza lo script dos proposto da Sophos si nota che presenta le seguenti problematiche:

  1. Per evitare la reinstallazione di Sophos Connect viene controllata l’esistenza del file %ProgramFiles(x86)%\Sophos\Connect\scvpn.exe su sistemi con architettura x86 e in caso contrario viene controllato l’esistenza del file %ProgramFiles%\Sophos\Connect\scvpn.exe. In realtà però l’installazione di Sophos Connect utilizzata sempre la cartella %ProgramFiles(x86)%\Sophos anche su architettura non x86, di conseguenza ad ogni avvio Sophos Connect verrebbe installato nuovamente.
  2. Lo script non controlla oltre alla presenza sul sistema di Sophos Connect anche la versione installata e questo rende impossibile gestire tramite questo script gli l’installazione delle successive versioni di Sophos Connect.

Per ovviare a tali problematiche e limitazioni ho sviluppato uno script Powershell per il deploy del pacchetto d’installazione di Sophos Connect che installi il package solo nel caso in cui il software non sia già presente sul sistema o nel caso in cui il software sia presente ma con una versione differente.

Per verificare se Sophos Connect è installato nel sistema è possibile utilizzare una query e questo è il motivo principale per cui è preferibile utilizzare PowerShell. Infatti per eseguire query wmi in uno script DOS è necessario utilizzare l’utility a riga di comando wmic, ma tale utility è stata deprecata in Windows 10 21H1 , a riguardo si veda il post WMIC deprecato in Windows 10 21H1. Analogamente da momento che anche VBScript è stato deprecato nell’Ottobre 2023 è sconsigliabile utilizzare VBS, a riguardo si veda Deprecated features in the Windows client – What’s new in Windows | Microsoft Learn.

Di seguito le istruzioni principali dello script PowerShell che ho sviluppato con cui viene eseguita la query WMI per identificare se nel sistema è installato Sophos Connect e in caso positivo quale versione è installata e se la versione presente non è quella desiderata (la 2.2.90.1104 ovvero l’ultima disponibile attualmente) viene avviata l’installazione del pacchetto msi.

# Impostazioni Costanti
$ProductName = “Sophos Connect
$ProductVersion = “2.2.90.1104
$SetupFileName = “SophosConnect_2.2.90_(IPsec_and_SSLVPN).msi

# Impostazioni Variabili per path file Setup
$PathFileSetup = Join-Path ($PSScriptRoot) ($SetupFileName)

$ProductInstalled = Get-WmiObject -Class Win32_Product | Where Name -eq $ProductName | Where Version -eq $ProductVersion

If (($ProductInstalled).Count -eq 0)
{
  # Avvio Installazione
  Start-Process -FilePath msiexec.exe -ArgumentList @(“/i”, “$PathFileSetup”, “/qn”, “/Le!+”, “$PathFileLog”) -Wait
}

Lo script è disponibile nel mio repository su GitHub PowerShell/SophosConnect at master · ermannog/PowerShell (github.com) dove è possibile scaricare lo script Install-SophosConnect-2290.ps1 per l’installazione della versione 2.2.90 del Sophos Connect client e il batch script Install-SophosConnect-2290.cmd che può essere usato per avviare lo script PowerShell.

E’ possibile automatizzare l’installazione tramite le Group Policy Preferences avviando lo script tramite un’operazione pianificata utilizzando l’approccio che avevo descritto nel dettaglio nel post Automazione operazioni su client Active Directory tramite scripts: considerazioni e hardening in cui è possibile trovare anche considerazioni sugli aspetti di sicurezza di cui è necessario tenere conto.

Il mio suggerimento è quello di automatizzare l’installazione tramite Group Policy Preferences che provvedano a copiare in locale lo script e il pacchetto d’installazione (impostando l’azione Aggiorna) e avviare lo script d’installazione tramite una operazione pianifica che esegue lo script con l’utente SYSTEM all’avvio del sistema. In questo modo anche se non si è connessi alla rete aziendale in caso di problemi con il Sophos Connect client sarà comunque possibile provare a disinstallarlo e al riavvio il software verrà reinstallato.