BgInfo: Il Cruscotto di Sistema Sempre a Portata di Mano

Perché usarlo ancora oggi?

  1. 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.
  2. 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.
  3. Leggerezza: BgInfo è un eseguibile standalone, non richiede installazione, librerie esterne né dipendenze complesse.
  4. Personalizzazione: puoi scegliere quali campi visualizzare, il font, i colori e persino aggiungere logo o informazioni proprie dell’azienda.
  5. 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:

  1. Verifica i permessi di esecuzione: controlla che lo script sia lanciato come Amministratore.
  2. Prepara la cartella di lavoro: crea o pulisce C:\BgInfo.
  3. Scarica BgInfo: recupera l’ultima versione dal sito ufficiale Sysinternals.
  4. Estrae e pulisce: scompatta il pacchetto e rimuove i file temporanei.
  5. Scarica il template BGI: importo automaticamente un file logon.bgi personalizzato.
  6. Imposta l’avvio automatico: crea o aggiorna la chiave di registro per far partire BgInfo ad ogni login senza prompt.
  7. 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

## ----------------------------------------------------------------------------------------------------------------------------------------------