Windows Server 2022: language pack spagnolo (es‑ES) in .cab — download, installazione e distribuzione via PowerShell

Devi distribuire il language pack spagnolo es‑ES su molte VM Hyper‑V con Windows Server 2022? In questa guida trovi fonti ufficiali per ottenere il file lp.cab, script PowerShell pronti all’uso, varianti per installazioni offline/online e consigli operativi per un rollout sicuro e ripetibile.

Indice

Obiettivo e contesto

Molte organizzazioni richiedono server localizzati per team distribuiti o per applicazioni che espongono messaggi di sistema nella lingua degli operatori. La modalità più solida per Windows Server 2022 è utilizzare il language pack .cab es‑ES (spagnolo, Spagna) e distribuirlo via PowerShell. L’approccio con file .cab permette di lavorare anche in ambienti isolati (senza accesso a Internet) e di garantire uniformità di versione tra tutte le VM.

Cos’è il language pack .cab e perché usarlo

Il pacchetto lp.cab contiene le risorse di interfaccia utente (UI) per la lingua scelta. In Windows Server 2022 è il formato raccomandato per:

  • Installazioni offline (immagini VHD/WIM, server senza Internet o con uscita bloccata).
  • Rollout coerenti tra server con la stessa build (evita mismatch di versione).
  • Automazione tramite PowerShell, MDT/ConfigMgr o pipeline DevOps.

Rispetto all’installazione “on demand” via Windows Update/WSUS, il file .cab è riutilizzabile, cacheabile, e version-locked.

Dove reperire legalmente il pacchetto es‑ES

I canali ufficiali per ottenere l’ISO che contiene tutti i language pack di Windows Server 2022 sono i seguenti.

OpzioneDove reperire il pacchettoRequisiti di licenza
Visual Studio Subscriptions (ex MSDN)Sezione Downloads and KeysAbbonamento Visual Studio attivo
Volume Licensing Service Center (VLSC)ISO Windows Server 2022 Language PacksContratto Volume Licensing (es. Windows Enterprise E3/E5)

Nota pratica: entrambi i portali forniscono l’ISO ufficiale che include tutte le lingue. Una volta montata o estratta l’ISO, troverai il pacchetto spagnolo in \x64\langpacks\es-es\lp.cab.

Vantaggi e limitazioni dell’approccio con .cab

Vantaggi

  • Riutilizzo: un solo file per tutte le VM, anche offline.
  • Controllo di versione: stessi asset su tutta la farm, allineati alla build del sistema (Windows Server 2022 – 20348.x).
  • Velocità: distribuzione rapida via script o strumenti d’immagine (MDT/ConfigMgr).

Svantaggi / Limitazioni

  • Licenza: serve accesso a VS Subscriptions o VLSC.
  • Spazio: l’ISO dei Language Packs pesa ~2 GB; conviene archiviarla su una share di rete o su DFS.

Prerequisiti operativi

  • Permessi: esegui gli script con privilegi amministrativi sulle VM.
  • Reboot: l’installazione del language pack richiede un riavvio per completare l’integrazione della UI.
  • Accesso al file: rendi disponibile lp.cab alle VM tramite:
    • Montaggio diretto dell’ISO (Mount-DiskImage) e path locale, oppure
    • Share SMB di sola lettura (consigliato per rollout massivi), oppure
    • PowerShell Direct (-VMName) se le VM sono su Hyper‑V sullo stesso host.
  • WinRM/Firewall (per Invoke‑Command su rete): assicurati che la comunicazione remota sia abilitata (Enable-PSRemoting) e che le regole firewall lo consentano.
  • Allineamento di build: usa language pack destinati a Windows Server 2022. Evita pacchetti di versioni diverse (causano errore not applicable).

Installazione locale su una singola VM

  1. Monta l’ISO dei Language Packs oppure copia lp.cab in locale.
  2. Esegui come amministratore: Add-WindowsPackage -Online -PackagePath "D:\langpacks\es-es\lp.cab" -NoRestart Set-WinSystemLocale es-ES Set-WinUILanguageOverride es-ES $ll = New-WinUserLanguageList es-ES Set-WinUserLanguageList $ll -Force Restart-Computer

Con questa procedura ottieni l’installazione del language pack e imposti la UI, la locale di sistema e la lingua utente su es‑ES.

Automazione su più VM Hyper‑V (rete)

Per agire in parallelo su più server in dominio o in workgroup (con credenziali appropriate), usa Invoke-Command passando il percorso UNC del .cab ospitato su una share SMB di sola lettura:

$Vms = @("SRV22-APP01","SRV22-DB01","SRV22-WEB01")
$Cab = "\\FileSrv\LangPacks\es-es\lp.cab"

Invoke-Command -ComputerName $Vms -ScriptBlock {
param($Path)
Add-WindowsPackage -Online -PackagePath $Path -NoRestart
Set-WinSystemLocale es-ES
Set-WinUILanguageOverride es-ES
Set-WinUserLanguageList -LanguageList es-ES -Force
} -ArgumentList $Cab

Restart-Computer -ComputerName $Vms -Force 

Automazione su VM Hyper‑V (PowerShell Direct, senza rete)

Se l’host Hyper‑V e le VM sono Windows 10/11 o Windows Server 2016+ sullo stesso host, puoi usare PowerShell Direct, che non richiede rete né WinRM:

$Vms = "SRV22-APP01","SRV22-DB01","SRV22-WEB01"
$CabLocalOnHost = "C:\ISO\WS2022-LP\x64\langpacks\es-es\lp.cab"

foreach ($vm in $Vms) {
Copy-VMFile -Name $vm -SourcePath $CabLocalOnHost -DestinationPath "C:\Temp\lp.cab" -FileSource Host -CreateFullPath -Force
Invoke-Command -VMName $vm -ScriptBlock {
Add-WindowsPackage -Online -PackagePath "C:\Temp\lp.cab" -NoRestart
Set-WinSystemLocale es-ES
Set-WinUILanguageOverride es-ES
Set-WinUserLanguageList -LanguageList es-ES -Force
Restart-Computer -Force
}
} 

Tip: con Copy-VMFile sfrutti il canale VMBus e non devi aprire porte di rete. Ideale per lab o cluster di test.

Approccio alternativo: Features on Demand / WSUS

Quando non puoi (o non vuoi) usare il .cab, puoi installare la lingua chiedendola a Windows Update o a WSUS:

Install-Language -Language es-ES -CopyToSettings
oppure, se vuoi includere un metodo di input specifico:
Install-Language -Language es-ES -InputMethod "es-ES" -CopyToSettings

Limite importante: questa via non ti fornisce il file .cab riutilizzabile e richiede connettività a Windows Update o un WSUS configurato per distribuire le lingue.

Verifica dell’installazione

Dopo il riavvio, verifica lingua di sistema e lingua utente:

Get-WinSystemLocale
Get-WinUserLanguageList
Alternativa (inventario pacchetti):
Get-WindowsPackage -Online | Where-Object { $_.PackageName -match "es-ES" }
Oppure DISM:
dism /Online /Get-Intl

Per auditing centralizzato, puoi raccogliere questi output e inviarli a un repository (CSV su share, Log Analytics, ecc.).

Script di distribuzione “robusto” per grandi ambienti

Di seguito un esempio con logging, controlli preliminari e gestione errori. Puoi eseguirlo da una macchina di gestione con permessi amministrativi sulle VM di destinazione.

param(
  [Parameter(Mandatory=$true)] [string[]] $ComputerName,
  [Parameter(Mandatory=$true)] [string]   $CabPath,           # UNC del lp.cab
  [switch] $WhatIf
)

$results = @()

foreach ($cn in $ComputerName) {
try {
Write-Host "[$cn] Verifica raggiungibilità..." -ForegroundColor Cyan
if (-not (Test-Connection -ComputerName $cn -Count 1 -Quiet)) {
throw "Host non raggiungibile"
}
```
$installed = Invoke-Command -ComputerName $cn -ScriptBlock {
  (Get-WinUserLanguageList).LanguageTag -contains 'es-ES'
}

if ($installed) {
  Write-Host "[$cn] es-ES già presente, skip." -ForegroundColor Yellow
  $results += [pscustomobject]@{ Computer=$cn; Status="AlreadyInstalled"; Notes="N/A" }
  continue
}

Write-Host "[$cn] Avvio installazione..." -ForegroundColor Green

if (-not $WhatIf) {
  Invoke-Command -ComputerName $cn -ScriptBlock {
    param($Path)
    Add-WindowsPackage -Online -PackagePath $Path -NoRestart
    Set-WinSystemLocale es-ES
    Set-WinUILanguageOverride es-ES
    Set-WinUserLanguageList -LanguageList es-ES -Force
  } -ArgumentList $CabPath

  Restart-Computer -ComputerName $cn -Force -ErrorAction Stop
}

$results += [pscustomobject]@{ Computer=$cn; Status="Installed"; Notes="Reboot initiated" }
```
}
catch {
$msg = $_.Exception.Message
Write-Host "[$cn] ERRORE: $msg" -ForegroundColor Red
$results += [pscustomobject]@{ Computer=$cn; Status="Error"; Notes=$msg }
}
}

$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$csv = "C:\Temp\LangPackes-ES$stamp.csv"
$results | Export-Csv -NoTypeInformation -Path $csv
Write-Host "Report salvato in $csv" 

Servicing offline di immagini (WIM/VHD/VHDX)

Se gestisci golden image o dischi differenziali, puoi integrare il language pack senza avviare il sistema:

Montando una WIM (ad esempio install.wim)

New-Item -ItemType Directory -Path C:\Mount -Force | Out-Null
dism /Mount-Image /ImageFile:C:\Images\install.wim /Index:1 /MountDir:C:\Mount
dism /Image:C:\Mount /Add-Package /PackagePath:C:\LP\es-es\lp.cab
dism /Image:C:\Mount /Set-SysLocale:es-ES /Set-UILang:es-ES /Set-UserLocale:es-ES
dism /Unmount-Image /MountDir:C:\Mount /Commit

Montando un VHD/VHDX (Offline)

Mount-VHD -Path "C:\Images\WS2022-Golden.vhdx" -PassThru | Get-Disk | Get-Partition | Get-Volume
Supponiamo che la partizione Windows sia montata come E:
dism /Image:E:\ /Add-Package /PackagePath:C:\LP\es-es\lp.cab
dism /Image:E:\ /Set-UILang:es-ES /Set-SysLocale:es-ES /Set-UserLocale:es-ES
Dismount-VHD -Path "C:\Images\WS2022-Golden.vhdx"

Questa tecnica è perfetta per immagini master (MDT) o pipeline CI/CD.

Integrazione con MDT/ConfigMgr

Per gestire la distribuzione su larga scala:

  • MDT: importa il lp.cab come Application o Package e aggiungi lo step Run PowerShell Script con Add-WindowsPackage + impostazioni di lingua; inserisci lo step prima di State Restore e prevedi il riavvio.
  • Configuration Manager: crea un Package con il .cab e un Program che esegue i comandi; come detection method usa l’esistenza della chiave HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\es-ES.

Personalizzazioni lingua per nuovi utenti

I cmdlet di cui sopra impostano lingua e locale per l’utente corrente e per il sistema. Se vuoi che tutti i nuovi profili nascano in spagnolo, aggiungi la copia nel profilo predefinito:

$ll = New-WinUserLanguageList es-ES
Set-WinUserLanguageList $ll -Force
Copia le impostazioni nel profilo Default (schermata iniziale e account di sistema)
Set-WinUILanguageOverride es-ES
Set-WinSystemLocale es-ES
Facoltativo: imposta anche il formato regionale
Set-Culture es-ES

Per applicare l’impostazione ai servizi di sistema e alla schermata di logon su immagini “generalizzate”, puoi usare anche un file unattend.xml con i componenti Microsoft-Windows-International-Core. Esempio minimale:

<settings pass="oobeSystem">
  <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
    <InputLocale>es-ES</InputLocale>
    <SystemLocale>es-ES</SystemLocale>
    <UILanguage>es-ES</UILanguage>
    <UserLocale>es-ES</UserLocale>
  </component>
</settings>

Rimozione o rollback

Per disinstallare il language pack:

Uninstall-Language es-ES
Oppure, individuando il nome del pacchetto e rimuovendolo:
Get-WindowsPackage -Online | ? { $_.PackageName -match "es-ES" } | 
  Remove-WindowsPackage -Online -NoRestart
Restart-Computer

Troubleshooting: errori comuni e fix

Errore/SintomoCausa probabileRimedi
0x800f081e (not applicable)Mismatch di versione/edizione del pacchettoUsa il lp.cab per Windows Server 2022; verifica dism /Online /Get-Intl e build OS.
0x800f0831 (sorgente mancante)Pacchetto non raggiungibile o path erratoControlla permessi sulla share, path UNC e integrità del file (copia locale per test).
Timeout o riavvii lunghiDISM/CBS impegnati in manutenzione componentiAttendi il completamento e consulta C:\Windows\Logs\DISM\dism.log e CBS.log.
UI non in spagnolo dopo l’installazioneLingua installata ma non impostata come UIEsegui Set-WinUILanguageOverride es-ES e riavvia. Verifica la lingua per il profilo corrente con Get-WinUserLanguageList.
Impossibile connettersi via Invoke-CommandWinRM non abilitato o firewallEsegui Enable-PSRemoting -Force, controlla le regole firewall, oppure usa PowerShell Direct (-VMName).

Best practice di sicurezza e gestione

  • Repository centralizzato: conserva l’ISO e il lp.cab in una share read‑only accessibile alle VM. Valuta DFS‑R per la replica multi‑sito.
  • Hash e versioning: calcola l’hash (SHA‑256) del .cab e includilo nel log di distribuzione.
  • Least privilege: usa account di servizio con diritti minimi necessari; evita credenziali condivise.
  • Finestra di manutenzione: pianifica i riavvii con un maintenance window; notifica gli owner dei servizi.
  • Rollback: predefinisci la procedura di disinstallazione o snapshot delle VM prima del cambio.

Esempi rapidi (cheat‑sheet)

  • Installazione locale
    Add-WindowsPackage -Online -PackagePath "D:\langpacks\es-es\lp.cab"
  • Installazione remota (UNC)
    Invoke-Command -ComputerName $vms -ScriptBlock { Add-WindowsPackage -Online -PackagePath "\\fileserver\langpacks\es-es\lp.cab" }
  • Verifica lingua
    Get-WinSystemLocale; Get-WinUserLanguageList
  • Installazione “senza portali” (Windows Update/WSUS)
    Install-Language es-ES (non genera un .cab riutilizzabile)
  • Path del pacchetto
    \x64\langpacks\es-es\lp.cab

Procedura consigliata passo‑passo

  1. Scarica l’ISO ufficiale dei Language Packs da Visual Studio Subscriptions o da VLSC in base al tuo contratto di licenza.
  2. Estrai solo il file lp.cab della lingua spagnola (es‑ES) e pubblicalo su una share leggibile dalle VM (permessi di sola lettura).
  3. Distribuisci via PowerShell con lo script: $Vms = @("SRV22-APP01","SRV22-DB01","SRV22-WEB01") $Cab = "\\FileSrv\LangPacks\es-es\lp.cab" Invoke-Command -ComputerName $Vms -ScriptBlock { param($Path) Add-WindowsPackage -Online -PackagePath $Path -NoRestart Set-WinSystemLocale es-ES Set-WinUILanguageOverride es-ES Set-WinUserLanguageList -LanguageList es-ES -Force } -ArgumentList $Cab Restart-Computer -ComputerName $Vms -Force
  4. Verifica post‑riavvio con Get-WinSystemLocale e Get-WinUserLanguageList; registra i risultati.

Domande frequenti

Il language pack funziona anche su Server Core?
Sì, la localizzazione di sistema è supportata anche su installazioni Server Core; alcune UI non sono presenti per definizione, ma messaggi di sistema, log e componenti supportati verranno localizzati.

Devo installare componenti aggiuntivi (TTS, OCR, Speech)?
Su Server di solito non servono. Se necessari, valuta i relativi Features on Demand (non inclusi nel lp.cab base).

Posso usare lpksetup.exe?
Nei sistemi moderni è deprecato; resta preferibile Add-WindowsPackage o DISM, e Install-Language per la modalità online.

Il riavvio è obbligatorio?
Per applicare completamente la UI e i componenti di lingua è richiesto un riavvio. Puoi usare -NoRestart durante la fase d’installazione e programmare il reboot al termine.

Come verifico l’allineamento di versione?
Controlla la build del sistema (winver o Get-ComputerInfo) e assicurati che il language pack provenga dall’ISO per Windows Server 2022. Evita pacchetti di release differenti.

Checklist finale

  • ISO Language Packs da canale licenziato (VS Subscriptions o VLSC).
  • lp.cab es‑ES estratto e pubblicato su share RO.
  • Script PowerShell testato su una VM di staging.
  • Finestra di manutenzione definita e comunicata.
  • Log e report distribuzione archiviati (CSV / SIEM).
  • Verifica post‑reboot della lingua di sistema e utente.

Conclusioni

Con il language pack .cab es‑ES e un set di script PowerShell ben progettati puoi rendere coerente e ripetibile la localizzazione di Windows Server 2022 su decine (o centinaia) di VM Hyper‑V. Oltre a rispettare i requisiti di licenza, questa strategia accelera l’operatività, riduce gli errori manuali e si integra facilmente con pipeline di provisioning e strumenti enterprise come MDT/ConfigMgr. Seguendo gli esempi e le best practice qui descritte, porterai in produzione server in spagnolo in modo affidabile, auditabile e reversibile.


Riepilogo rapido

  • Fonti ufficiali: Visual Studio Subscriptions & VLSC (ISO Language Packs).
  • Percorso del file: \x64\langpacks\es-es\lp.cab.
  • Installazione: Add-WindowsPackage + impostazioni lingua; riavvio.
  • Automazione: Invoke-Command (rete) o PowerShell Direct (Hyper‑V).
  • Alternativa: Install-Language es-ES via Windows Update/WSUS (senza .cab riutilizzabile).
  • Verifica: Get-WinSystemLocale, Get-WinUserLanguageList, dism /Online /Get-Intl.

Così otterrai VM in spagnolo senza interventi manuali, con una pipeline di distribuzione chiara e governabile.

Indice