Per automatizzare il software VMS Milestone XProtect è disponibile da alcuni anni il MilestonePSTools Module che mette a disposizione una serie di cmdlet PowerShell che permettono l’automazione di alcune attività non presenti o non ancora disponibili tramite i tool nativi del sofware Milestone XProtect.
Sicuramente in sistemi di videosorveglianza basati su software VMS Milestone XProtect una funzionalità estremamente utile è quella di avere a disposizione un report html che mostri l’elenco delle telecamere che non rispondono in modo da poter essere visualizzato semplicemente anche su computer su cui non è stato installato alcun componente software Milestone.

Per realizzare un report di questo tipo è possibile il cmdlet Get-ItemState – MilestonePSTools Module che permette di ottenere l’elenco degli item configurati nel VMS Milestone XProtect di tipo telecamera (utilizzando il l’opzione -CamerasOnly) aventi lo stato diverso da ‘Reponding’.
Tale interrogazione è veloce perché il cmdlet invia un messaggio “MessageCommunication.ProvideCurrentStateRequest” al XProtect Event Server e ne gestisce la riposta. Questo significa che il cmdlet non va a interrogare le telecamere, ma ottiene dal XProtect Event Server l’informazione di quali telecamere sono al momento ritenute inattive dal VMS Milestone XProtect in base a pregresse analisi.
Ho reso disponibile sul mio repository su GitHub lo script PowerShell Get-CameraNotRespondingReport che fa uso del MilestonePSTools Module versione 25.2.61 o successiva e che permette di generare un report Html delle telecamere configurate in un VMS Milestone XProtect che non rispondono.
Di seguito alcune considerazioni emerse duramte lo sviluppo dello script.
Utilizzo del MilestonePSTools Module
Il MilestonePSTools Module attualmente alla versione 25.2.61 è compatibile con la versione 26.1 di XProtect VMS (per informazioni sulla compatibilità si veda Compatibility – MilestonePSTools Module) e richiede che sul sistema su cui viene utilizzato siano presenti Windows PowerShell 5.1 e il .NET Framework 4.7.2 o successivo.
Per utilizzare il MilestonePSTools Module in uno script è possibile installarlo a livello di utente corrente oppure per tutti gli utenti o utilizzarlo in modalità per così dire “portable” ovvero senza installazione, semplicemente scaricando il file nupkg ed estraendolo dal momento che è un file ZIP. Perr maggiori indformazioni si veda Getting started – MilestonePSTools Module.
Nello script Get-CameraNotRespondingReport che ho sviluppato ho preveisto la possibilità di utilizzare il MilestonePSTools Module sia in modalità “installata” che “portable” tramite il parametro PathDataFileMilestonePSTools. Se tale parametro non viene passato lo script presuppone che il MilestonePSTools Module sia installato, in caso contrario PathDataFileMilestonePSTools contiene il path del file dile dati del modulo MilestonePSTools.psd1 tramite cui è possibile importare il modulo nello script.
# Import Module MilestonePSTools Module
If ($PathDataFileMilestonePSTools -ne “”){
$Message = “Import Module MilestonePSTools Module.”
Write-Host $Message -ForegroundColor Green
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” ” + $Message | Out-File $PathFileLog -AppendImport-Module $PathDataFileMilestonePSTools
} Else {
Import-Module MilestonePSTools
}
Dal momento che il MilestonePSTools Module ha subito nelle varie versioni varie modifiche ocn deprecazioni di parametri in vari cmdlet e introduzione di nuovi cmdlet che modificano e migliorano le funizionalità un approccio “portable” può essere vantaggioso, soprattutto se sono stati sviluppati vari script e si vuole testarli con calma prima di adottare una nuova release del MilestonePSTools Module.
Generazione del report Html
Per generare il report Html è possibile utilizzare il cmdlet ConvertTo-Html che ne varie versioni di PowerShell è stato oggetto di vari miglioramenti consentento una granulare personalizzazione dell’Html generato.
Per evitare problemi con i css occore assicurarsi che il report Html venga scritto con la codifica utf-8:
# Report file creation
$report | Out-File $PathFileReport -Encoding utf8
Nello script Get-CameraNotRespondingReport che ho sviluppato ho previsto anche la possibilità di utilizzare un file css che deve avere lo stesso nome del file del report.
Il nome del file del report Html può essere specificato tramite il parametro PathFileReport che per default genera un file di report nella stessa cartella in cui è memorizzato lo script con il nome CameraNotRespondingReport.html.