Perché usarlo ancora oggi?
- Praticità immediata: quando entri in remoto su un server, non devi aprire più finestre o far partire comandi per verificare la versione di Windows, il dominio, l’indirizzo IP o l’utilizzo delle risorse. Tutto è sotto i tuoi occhi.
- Riduzione degli errori: soprattutto in ambienti con tanti server identici, avere subito sotto controllo le informazioni di base ti aiuta a evitare di eseguire operazioni sulla macchina sbagliata.
- Leggerezza: BgInfo è un eseguibile standalone, non richiede installazione, librerie esterne né dipendenze complesse.
- Personalizzazione: puoi scegliere quali campi visualizzare, il font, i colori e persino aggiungere logo o informazioni proprie dell’azienda.
- Compatibilità: funziona senza problemi su Windows Server 2008, 2012, 2016, 2019, 2022 e anche sulle versioni desktop di Windows.
Lo script di deploy: motivazioni e funzionamento
Gestire manualmente BgInfo, soprattutto in ambienti con molti server, può diventare noioso e soggetto a errori:
- Ogni server va configurato singolarmente.
- Bisogna scaricare la versione più recente e caricare il file BGI.
- È necessario assicurarsi che venga eseguito all’avvio in modalità silenziosa.
Per semplificare tutto questo ho creato uno script PowerShell che:
- Verifica i permessi di esecuzione: controlla che lo script sia lanciato come Amministratore.
- Prepara la cartella di lavoro: crea o pulisce
C:\BgInfo. - Scarica BgInfo: recupera l’ultima versione dal sito ufficiale Sysinternals.
- Estrae e pulisce: scompatta il pacchetto e rimuove i file temporanei.
- Scarica il template BGI: importo automaticamente un file
logon.bgipersonalizzato. - Imposta l’avvio automatico: crea o aggiorna la chiave di registro per far partire BgInfo ad ogni login senza prompt.
- Esegue BgInfo: lancia il tool in modalità silenziosa per applicare immediatamente il nuovo sfondo.
In questo modo basta lanciare lo script una sola volta (o integrarlo in un deployment centralizzato) per avere BgInfo installato e configurato correttamente su tutti i server in pochi secondi.
Conclusioni
BgInfo è un piccolo grande alleato per amministratori di sistema e infrastrutture Windows: semplice, leggero e immediato. Anche dopo anni dalla sua prima versione, rimane uno strumento irrinunciabile per chiunque voglia avere sempre sotto controllo lo stato dei propri server.
Lo script che ho condiviso è un ulteriore passo verso l’automazione e la standardizzazione dei processi: se gestisci più macchine o vuoi includere BgInfo in una pipeline di configurazione, ti risparmierà tempo e fatica.
Se hai domande, suggerimenti o vuoi contribuire a migliorare lo script, lascia un commento qui sotto o contattami su LinkedIn!
Buona automazione! 🚀
<#
.SYNOPSIS
Uno script utilizzato per scaricare, installare e configurare l'ultima versione di BgInfo su Windows Server 2016, 2019, 2022 o 2025.
.DESCRIPTION
Questo script esegue le seguenti operazioni:
- Verifica se PowerShell è in esecuzione come Amministratore, altrimenti termina lo script.
- Crea la cartella BgInfo in C: se non esiste, altrimenti ne cancella il contenuto.
- Scarica, salva ed estrae l'ultima versione di BgInfo in C:\BgInfo.
- Scarica, salva ed estrae il file logon.bgi in C:\BgInfo.
- Crea la chiave di Registro per l'avvio automatico di BgInfo.
- Esegue BgInfo.
#>
## ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
## Variabili
$cartellaBgInfo = "C:\BgInfo"
$contenutoCartellaBgInfo = "$cartellaBgInfo\*"
$urlBgInfo = "https://download.sysinternals.com/files/BGInfo.zip"
$zipBgInfo = "C:\BgInfo\BGInfo.zip"
$eulaBgInfo = "C:\BgInfo\Eula.txt"
$urlLogonBgi = "https://www.azurelab.blog/wp-content/uploads/2025/04/logonbgi-1.zip"
$zipLogonBgi = "$cartellaBgInfo\LogonBgi.zip"
$percorsoRegistroBgInfo = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$chiaveRegistroBgInfo = "BgInfo"
$valoreRegistroBgInfo = "C:\BgInfo\Bginfo64.exe C:\BgInfo\logon.bgi /timer:0 /nolicprompt"
$oraCorrente = Get-Date -UFormat "%A %d/%m/%Y %R"
$colore1 = "Green"
$colore2 = "Yellow"
$colore3 = "Red"
$rigaVuota = "`n"
$separatoreSpazi = " - "
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Verifica se PowerShell è in esecuzione come Amministratore, altrimenti termina lo script
$principaleCorrente = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $principaleCorrente.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host ($rigaVuota + "# Esegui PowerShell come Amministratore" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Inizio esecuzione script
Write-Host ($rigaVuota + "# Script avviato. Senza errori, può richiedere fino a 2 minuti" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore1 $rigaVuota
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Crea la cartella BgInfo in C: se non esiste, altrimenti ne cancella il contenuto
try {
if (!(Test-Path -Path $cartellaBgInfo)) {
New-Item -ItemType Directory -Force -Path $cartellaBgInfo | Out-Null
Write-Host ($rigaVuota + "# Cartella BgInfo creata in $cartellaBgInfo" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
} else {
Remove-Item -Path $contenutoCartellaBgInfo -Force -Recurse -ErrorAction SilentlyContinue
Write-Host ($rigaVuota + "# Contenuto esistente della cartella BgInfo eliminato" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
}
} catch {
Write-Host ($rigaVuota + "# Errore nella creazione o pulizia della cartella BgInfo: $_" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Scarica, salva ed estrae BgInfo in C:\BgInfo
try {
Import-Module BitsTransfer -ErrorAction Stop
Start-BitsTransfer -Source $urlBgInfo -Destination $zipBgInfo
Expand-Archive -LiteralPath $zipBgInfo -DestinationPath $cartellaBgInfo -Force
Remove-Item $zipBgInfo, $eulaBgInfo -Force
Write-Host ($rigaVuota + "# BgInfo scaricato ed estratto correttamente" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
} catch {
Write-Host ($rigaVuota + "# Errore durante download o estrazione di BgInfo: $_" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Scarica, salva ed estrae logon.bgi in C:\BgInfo
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $urlLogonBgi -OutFile $zipLogonBgi -ErrorAction Stop
Expand-Archive -LiteralPath $zipLogonBgi -DestinationPath $cartellaBgInfo -Force
Remove-Item $zipLogonBgi -Force
Write-Host ($rigaVuota + "# File logon.bgi disponibile" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
} catch {
Write-Host ($rigaVuota + "# Errore durante download o estrazione di logon.bgi: $_" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Crea la chiave di Registro per l'avvio automatico di BgInfo
try {
if (Get-ItemProperty -Path $percorsoRegistroBgInfo -Name $chiaveRegistroBgInfo -ErrorAction SilentlyContinue) {
Write-Host ($rigaVuota + "# Chiave di Registro BgInfo già esistente" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
} else {
New-ItemProperty -Path $percorsoRegistroBgInfo -Name $chiaveRegistroBgInfo -PropertyType String -Value $valoreRegistroBgInfo -Force | Out-Null
Write-Host ($rigaVuota + "# Chiave di Registro BgInfo creata" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
}
} catch {
Write-Host ($rigaVuota + "# Errore nella creazione della chiave di Registro BgInfo: $_" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Esegui BgInfo
try {
Start-Process -FilePath "$cartellaBgInfo\Bginfo64.exe" -ArgumentList "$cartellaBgInfo\logon.bgi /timer:0 /nolicprompt" -NoNewWindow -Wait
Write-Host ($rigaVuota + "# BgInfo eseguito con successo" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore2 $rigaVuota
} catch {
Write-Host ($rigaVuota + "# Errore nell'esecuzione di BgInfo: $_" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore3 $rigaVuota
exit
}
## ----------------------------------------------------------------------------------------------------------------------------------------------
## Fine esecuzione script
Write-Host ($rigaVuota + "# Script completato" + $separatoreSpazi + $oraCorrente) -ForegroundColor $colore1 $rigaVuota
## ----------------------------------------------------------------------------------------------------------------------------------------------