Ne ho avuto bisogno qualche tempo fa e l’ho pure spacciato un po’ tra conoscenti con la stessa necessità: uno script PowerShell per scaricare un file MSI e installarlo passando alcune opzioni da riga di comando in maniera pulita e comprensibile (in questo caso sto parlando di GoSign Desktop di Infocert, simpatico come una scimmia urlatrice in stanza e documentato quanto un ago da cercare in un pagliaio).
Nato anche grazie allo spunto trovato in una discussione su Stack Overflow, questo di seguito è lo script. Subito dopo ti spiego cosa c’è da sapere e cosa può fare per te:
<# | |
GSolone, 2023 | |
Credits: | |
https://stackoverflow.com/a/44337588 | |
Changes: | |
7/7/23- Improve: I provide for download-only capability via script with parameter -DownloadOnly (without installation). | |
Change: removed pause command, if I download the installation package I will proceed and notify on screen. | |
#> | |
param( | |
[Parameter(Mandatory=$False, HelpMessage="Download GoSign Desktop without installing")] | |
[switch] $DownloadOnly | |
) | |
function downloadMSI($fileURL,$filePath) { | |
Invoke-WebRequest -uri $fileURL -OutFile $filePath | |
$MSIfile = Get-ChildItem -Path $filePath -File -Filter '*.ms*' | |
Write-Host "MSI found: $($MSIfile)" | |
return $MSIfile | |
} | |
function installMSI($MSIfile) { | |
$checkFile = Test-Path $MSIfile -IsValid | |
$today = Get-Date -Format yyyyMMddTHHmmss | |
$logFile = '{0}-{1}.log' -f $MSIfile.fullname,$today | |
$MSIArguments = @( | |
"/i" | |
('"{0}"' -f $MSIfile.fullname) | |
"ALLUSERS=1" | |
"APPLICATIONFOLDER=`"$env:ProgramFiles\InfoCert\GoSign Desktop`"" | |
"/quiet" | |
"/qn" | |
"/norestart" | |
"/log" | |
$logFile | |
) | |
if ( $checkFile -eq $True ) { | |
Write-Host "Installation started: `nmsiexec.exe $($MSIArguments)" -f "Yellow" | |
Start-Process "msiexec.exe" -ArgumentList $MSIArguments -Passthru | Wait-Process | |
Write-Host "Finished installation $($MSIfile)" -f "Green" | |
Remove-Item $MSIfile.fullname -Confirm:$false | |
} else { | |
Write-Host "File not found." -f "Red" | |
} | |
} | |
if (!($DownloadOnly)) { | |
$MSIfile = downloadMSI "https://rinnovofirma.infocert.it/gosign/download/win32/latest/" "$env:TEMP\GoSign-Desktop-installer-win32.msi" | |
installMSI $MSIfile | |
} else { | |
if (!(Test-Path "C:\Temp")) { New-Item "C:\Temp" -ItemType Directory } | |
$MSIfile = downloadMSI "https://rinnovofirma.infocert.it/gosign/download/win32/latest/" "C:\Temp\GoSign-Desktop-installer-win32.msi" | |
} |
Ammesso tu sappia leggere il codice PowerShell (cosa non così complicata) potresti già aver capito che lo script – se lanciato senza parametri – si occuperà di andare a scaricare la versione più aggiornata del software (direttamente dall’indirizzo rinnovofirma.infocert.it/gosign/download/win32/latest) e installarla con i seguenti parametri:
ALLUSERS=1
: forzerà il programma a installarsi per tutti gli utenti e non solo per l’utente corrente che sta lanciando l’esecuzione del file MSI.APPLICATIONFOLDER=`"$env:ProgramFiles\InfoCert\GoSign Desktop`"
: a corredo del parametro precedente, questo forzerà l’installazione a scrivere nella cartella inC:\Program Files\InfoCert\GoSign Desktop
(Program Files (x86)
se il sistema operativo gira a 64 bit) così da essere utilizzabile da tutti gli utenti che utilizzano il medesimo PC./quiet
,/qn
e/norestart
eseguiranno tutto in maniera silenziosa e bloccando eventuali necessari riavvii del sistema./log
(seguito poi dalla variabile$logFile
) non farà altro che scrivere un file di log in cui l’amministratore di sistema potrà sbirciare alla ricerca di eventuali errori o per capire se l’installazione è andata a buon fine vedendone ogni singolo passaggio.
Lo script dovrà essere lanciato come amministratore locale della macchina (almeno) perché diversamente non sarebbe possibile scrivere nella cartella Program Files. Lo stesso farà dapprima partire il download del file MSI dal sito web ufficiale di InfoCert e – salvo errori – poi l’installazione.
Download Only
Lo stesso script prevede anche un parametro da riga di comando (-DownloadOnly
, si tratta di uno switch) che permetterà di lanciare esclusivamente il download del software (senza necessità di ricordarsi l’indirizzo completo del sito web o di cercarlo passando per Google o soci) che verrà salvato nella cartella C:\Temp
(se non esiste verrà creata al momento). L’ho fatto perché mi è utile per dare in pasto l’eseguibile all’appliance di inventario / distribuzione software (Kace).
Spero possa tornarti utile e – nel caso tu abbia dubbi – ricorda che l’area commenti è sempre a tua totale disposizione.
#KeepItSimple
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)