Windows Server 2022 : télécharger et déployer le pack de langue espagnol (.cab) avec PowerShell

Besoin de basculer rapidement des dizaines de VM Hyper‑V de l’anglais vers l’espagnol ? Voici comment obtenir légalement le .cab du pack de langue pour Windows Server 2022 et le déployer à grande échelle avec PowerShell, tout en évitant les écueils de compatibilité.

Sommaire

Où trouver le pack de langue espagnol pour Windows Server 2022 (.cab) ?

Problème

Vous devez migrer un parc de serveurs (souvent des VM Hyper‑V) d’en‑US vers es‑ES et recherchez le fichier lp.cab afin de l’intégrer dans un script PowerShell reproductible. Les canaux publics ne fournissant pas de .cab individuels, le point de départ est de savoir exactement où récupérer l’ISO officiel.

Solution officielle (sources légitimes)

CanalConditions d’accèsFichier à récupérer
Visual Studio (ancien MSDN) – “Downloads and Keys”Abonnement VS actifISO Windows Server Language Packs (contient tous les .cab)
Volume Licensing Service Center (VLSC)Licence en volume / Software AssuranceMême ISO Language Packs

Important : Microsoft ne publie pas les .cab des packs de langue serveur sur un site public ni via le Microsoft Store. N’utilisez pas de sources tierces : vous risqueriez des incompatibilités (builds non alignées), une surface d’attaque accrue et des incidents d’audit.

Comprendre la structure de l’ISO “Language Packs”

Une fois l’ISO téléchargé et monté, vous trouverez les dossiers par langue sous \langpacks\<culture>\. Pour l’espagnol d’Espagne :

  • \langpacks\es-es\lp.cab – composant d’interface (UI) principal.
  • \langpacks\es-es\ – autres fonctionnalités facultatives (selon ISO/édition, ou via Capabilities).

Windows Server 2022 (build 20348.x) accepte deux approches : l’ajout direct du .cab avec DISM/PowerShell ou l’ajout des Capabilities (Language.Basic, OCR, Speech…) lorsque votre build inclut le correctif approprié (voir plus bas).


Déploiement automatisé par PowerShell

Étapes minimales

  1. Montez l’ISO téléchargé depuis l’un des canaux ci‑dessus.
  2. Copiez le fichier \langpacks\es-es\lp.cab (ou le dossier complet si vous prévoyez d’ajouter l’OCR, la synthèse vocale, etc.).
  3. Installez la langue et appliquez les paramètres régionaux essentiels :
$lpPath = "D:\LangPacks\es-es\lp.cab"

# 1) Installer le pack via DISM (Add-WindowsPackage)
Add-WindowsPackage -Online -PackagePath $lpPath

# 2) Régler les paramètres régionaux et d'interface
Set-WinSystemLocale es-ES
Set-WinUserLanguageList -LanguageList es-ES -Force
Set-WinUILanguageOverride es-ES
Set-Culture es-ES

# 3) Redémarrer pour finaliser
Restart-Computer

Sur les builds ayant reçu le correctif adapté (ex. KB 5007497 et suivants), vous pouvez utiliser le mécanisme Capabilities :

# Installe le socle de la langue (équivalent au lp.cab)
Add-WindowsCapability -Online -Name Language.Basic~~~es-ES~0.0.1.0

# Composants complémentaires au besoin :

# Add-WindowsCapability -Online -Name Language.OCR\~\~\~es-ES\~0.0.1.0

# Add-WindowsCapability -Online -Name Language.TextToSpeech\~\~\~es-ES\~0.0.1.0

# Add-WindowsCapability -Online -Name Language.Speech\~\~\~es-ES\~0.0.1.0

# Add-WindowsCapability -Online -Name Language.Handwriting\~\~\~es-ES\~0.0.1.0

Set-WinSystemLocale es-ES
Set-WinUserLanguageList -LanguageList es-ES -Force
Set-WinUILanguageOverride es-ES
Set-Culture es-ES
Restart-Computer 

Astuce : si votre environnement est isolé (WSUS/aucun accès Internet), utilisez une source locale et/ou privilégiez Add-WindowsPackage avec le .cab. Pour les Capabilities, vous pouvez pointer -Source vers le média de fonctionnalités si disponible et ajouter -LimitAccess pour ne pas contacter Windows Update.

Automatiser sur plusieurs machines

Pour un lot de serveurs, stockez le .cab sur un partage sécurisé (lecture seule pour l’ordinateur) ou intégrez‑le à un VHD de référence. Exemples de stratégies :

  • PowerShell Remoting + partage SMB : pousser le .cab et exécuter les commandes ci‑dessus.
  • Runbook Azure Automation : centraliser le script et le déclencher par groupe d’étapes.
  • Desired State Configuration : imposer l’état es‑ES (via un Script Resource ou une ressource dédiée lorsqu’elle est disponible).
  • Intune / MECM : packager l’installation + redémarrage planifié avec un script de détection fiable.

Exemple de script robuste (copie + installation + journalisation)

$Servers   = Get-Content ".\serveurs.txt"          # liste NetBIOS ou FQDN
$SourceCab = "\\filesrv\deploy\langpacks\es-es\lp.cab"
$DestDir   = "C:\ProgramData\Langpacks\es-es"
$LogRoot   = "C:\ProgramData\Langpacks\logs"
New-Item -ItemType Directory -Path $LogRoot -Force | Out-Null

foreach (\$srv in \$Servers) {
Write-Host "=== \$srv ==="
try {
\$sess = New-PSSession -ComputerName \$srv -ErrorAction Stop

```
Invoke-Command -Session $sess -ScriptBlock {
  param($d) New-Item -ItemType Directory -Path $d -Force | Out-Null
} -ArgumentList $DestDir

Copy-Item -Path $SourceCab -Destination $DestDir -ToSession $sess -Force

Invoke-Command -Session $sess -ScriptBlock {
  param($d,$log)
  $cab = Join-Path $d 'lp.cab'
  $ts  = Get-Date -Format "yyyyMMdd-HHmmss"
  $lf  = Join-Path $log "lp_es-es_$env:COMPUTERNAME`_$ts.log"

  Start-Transcript -Path $lf -Force
  Add-WindowsPackage -Online -PackagePath $cab -NoRestart
  Set-WinSystemLocale es-ES
  Set-WinUserLanguageList -LanguageList es-ES -Force
  Set-WinUILanguageOverride es-ES
  Set-Culture es-ES
  Stop-Transcript

  # Planifier un redémarrage dans 2 minutes (fenêtre de grâce)
  schtasks /Create /TN "LangPackReboot" /TR "shutdown /r /t 30 /c `"Spanish language applied`"" /SC ONCE /ST (Get-Date).AddMinutes(2).ToString('HH:mm') /F | Out-Null
} -ArgumentList $DestDir,$LogRoot

Remove-PSSession $sess
```

}
catch {
Write-Warning "Echec sur \$srv : \$($\_.Exception.Message)"
}
} 

Cartographie des composants (Capabilities)

BesoinCapabilityQuand l’installer
Interface utilisateur espagnoleLanguage.Basic~~~es-ES~0.0.1.0Toujours (socle)
Reconnaissance optique de caractèresLanguage.OCR~~~es-ES~0.0.1.0Serveurs qui traitent des images ou des PDF scannés
Reconnaissance vocaleLanguage.Speech~~~es-ES~0.0.1.0Cas spécifiques (dictée/commande vocale)
Synthèse vocaleLanguage.TextToSpeech~~~es-ES~0.0.1.0Lecture de texte
Écriture manuscriteLanguage.Handwriting~~~es-ES~0.0.1.0Peu courant sur serveur

Vérifier l’installation

# Conformité UI et locales
Get-WinSystemLocale
(Get-WinUserLanguageList).LanguageTag
Get-Culture

# Inventaire des packages/capabilities

Get-WindowsPackage -Online | Where-Object { \$*.PackageName -like "*Language*" } | Select PackageName, State
Get-WindowsCapability -Online | Where-Object { \$*.Name -like "Language.*es-ES*" } | Select Name, State 

Bonnes pratiques et points d’attention

  • Version/Build : utilisez un pack correspondant exactement à votre OS (Windows Server 2022 = build 20348.x). Un écart entraîne l’erreur “not applicable”.
  • Architecture : choisissez amd64 pour l’immense majorité des hôtes x64.
  • Composants complémentaires : installez‑les après Language.Basic uniquement si nécessaire (OCR, Speech, etc.).
  • Redémarrage : prévoyez un reboot pour appliquer la nouvelle UI (Welcome Screen, comptes de service, etc.).
  • Image de base : si vous déployez souvent des VM, intégrez le pack dans votre image Sysprep (VHD/WIM) pour gagner du temps et de la bande passante.
  • Server Core vs Server with Desktop Experience : procédure identique, mais tout se pilote en PowerShell sous Core (pas d’applets GUI de langue).
  • Sécurité : vos partages de déploiement doivent être en lecture seule, signés si vous utilisez des scripts (AMSI/Constrained Language Mode pris en compte).

Intégration dans une image (WIM/VHD) – déploiement hors ligne

Idéal pour des déploiements massifs et homogènes.

# Exemple WIM offline
$Mount = "C:\Mount"
$Wim   = "C:\Images\Server2022.wim"
$Cab   = "D:\LangPacks\es-es\lp.cab"
dism /Mount-Image /ImageFile:$Wim /Index:1 /MountDir:$Mount
dism /Image:$Mount /Add-Package /PackagePath:$Cab

# (Optionnel) Régler les locales par défaut pour tous les nouveaux profils

dism /Image:\$Mount /Set-UILang\:es-ES
dism /Image:\$Mount /Set-UserLocale\:es-ES
dism /Image:\$Mount /Set-SysLocale\:es-ES
dism /Image:\$Mount /Set-InputLocale\:es-ES

# Commit

dism /Unmount-Image /MountDir:\$Mount /Commit 

Pour un disque VHD de référence, montez le VHD, chargez sa ruche HKLM si nécessaire, injectez le .cab avec /Image: pointant sur la lettre montée, puis generalize via Sysprep lors de la préparation de l’image.


Propagation aux nouveaux comptes (écran d’accueil et profils)

Les commandes Set‑WinUserLanguageList affectent l’utilisateur courant. Pour imposer es‑ES au Welcome Screen et aux nouveaux comptes, utilisez un fichier unattend minimal et appliquez‑le :

&lt;unattend&gt;
  &lt;settings pass="oobeSystem"&gt;
    &lt;component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"&gt;
      &lt;InputLocale&gt;es-ES&lt;/InputLocale&gt;
      &lt;SystemLocale&gt;es-ES&lt;/SystemLocale&gt;
      &lt;UILanguage&gt;es-ES&lt;/UILanguage&gt;
      &lt;UserLocale&gt;es-ES&lt;/UserLocale&gt;
    &lt;/component&gt;
  &lt;/settings&gt;
&lt;/unattend&gt;
dism.exe /online /apply-unattend:C:\Temp\intl-es-es.xml

Spécificités Hyper‑V et industrialisation

  • Référentiel local : intégrer lp.cab dans le VHD de base (golden image) au répertoire C:\ProgramData\Langpacks\ pour éviter le réseau lors du premier boot.
  • Différenciel : avec des disques différenciés, la langue est déjà présente sur les enfants — excellent gain de temps.
  • Orchestration : déclenchez Invoke-Command par lots, avec contrôles de charge (ex. 20 serveurs simultanés), et un redémarrage étalé (back‑off) pour ne pas saturer vos services.

Désinstallation ou bascule

Si vous devez revenir en arrière ou supprimer un pack non utilisé :

# Via Package
Get-WindowsPackage -Online | Where-Object { $_.PackageName -like "*Language*es-ES*" }
Remove-WindowsPackage -Online -PackageName "<NomDuPackage>"

# Via Capabilities

Get-WindowsCapability -Online | Where-Object { $\_.Name -like "Language.*es-ES*" }
Remove-WindowsCapability -Online -Name "Language.Basic\~\~\~es-ES\~0.0.1.0"

# Réaffecter l'UI si vous retirez es-ES :

Set-WinUILanguageOverride en-US
Set-WinSystemLocale en-US
Set-WinUserLanguageList -LanguageList en-US -Force
Restart-Computer 

Conseil : ne retirez jamais une langue actuellement utilisée par la session système ; repassez d’abord l’interface en en‑US (ou autre) puis supprimez es‑ES.


Dépannage (erreurs fréquentes)

Symptôme / CodeCause probableCorrectif
0x800f081e – “The specified package is not applicable”Build du pack ≠ build du système (ex. pack non 20348.x)Reprendre l’ISO “Language Packs” aligné avec votre Windows Server 2022
0x800f0954 lors d’Add-WindowsCapabilityLe serveur tente WSUS et ne contacte pas Windows UpdateUtiliser -Source local + -LimitAccess ou installer via Add-WindowsPackage avec le .cab
0x800f0831Composants de base manquants, stockage source absentMonter l’ISO de fonctionnalités/LP adéquat et référencer la source locale
Interface restée en anglais après redémarrageParamètres UILanguageOverride / profil par défaut non copiésExécuter Set-WinUILanguageOverride es-ES et appliquer un unattend pour l’écran d’accueil
Serveur Core : pas d’interface de configurationComportement normalToutes les opérations se font par PowerShell (voir scripts ci‑dessus)

Contrôles post‑déploiement & conformité

  • Enregistrez systématiquement la sortie de vos scripts (transcripts) et l’état des machines (capabilities/Packages) dans un partage d’audit.
  • Créez une règle de détection (MECM/Intune) qui vérifie es‑ES dans Get-WinSystemLocale, la présence du package et la valeur d’UILanguageOverride.
  • Étalonnez les redémarrages pour limiter l’impact sur les services (fenêtres de maintenance, drain des rôles clusterisés).

FAQ

Peut‑on télécharger un lp.cab individuel depuis un site Microsoft public ?
Non, pas pour Windows Server. Le média officiel est l’ISO “Windows Server Language Packs”, distribué via Visual Studio (abonnés) ou VLSC.

Quelle est la différence entre Add-WindowsPackage et Add-WindowsCapability ?
Add-WindowsPackage installe directement le .cab du pack. Add-WindowsCapability gère des composants Features on Demand (Language.Basic, OCR…) et peut récupérer la source sur un média local ou un service. Sur Server 2022, les deux approches fonctionnent selon votre build/politique.

Faut‑il installer OCR/Speech/Text‑to‑Speech sur un serveur ?
Uniquement si vos charges le nécessitent. Sur serveur, la majorité des usages n’exigent que Language.Basic.

Les contrôleurs de domaine ont‑ils des contraintes particulières ?
Prévoyez une fenêtre de redémarrage dédiée et évitez d’installer/désinstaller des langues simultanément sur plusieurs DC du même site. Testez auparavant sur un DC hors production.


Checklist express

✅ ISO “Windows Server Language Packs” obtenu via canal officiel
✅ Alignement de build vérifié (20348.x)
lp.cab stocké sur un partage sécurisé/immuable
✅ Script PowerShell testé sur VM pilote (transcripts activés)
✅ Fenêtre de redémarrage planifiée et communiquée
✅ Contrôles post‑déploiement (locales, UI, packages) en place

Conclusion

La voie sûre et supportée pour installer l’espagnol sur Windows Server 2022 consiste à obtenir l’ISO “Language Packs” via Visual Studio (MSDN) ou VLSC, puis à déployer le lp.cab par script PowerShell. Selon votre build, l’usage des Capabilities simplifie encore la gestion (Language.Basic, OCR, etc.). En industrialisant le processus (partage local, runbook/DSC, image de référence), vous obtenez un déploiement cohérent, auditable et reproductible sur l’ensemble de vos VM Hyper‑V.


Récapitulatif condensé

Canaux officiels

CanalAccèsTéléchargement
Visual Studio (MSDN)Abonnement VSISO “Windows Server Language Packs”
VLSCLicence en volume / SAMême ISO “Language Packs”

Évitez toute source tierce pour raison de sécurité et de compatibilité.

Commande de base

Add-WindowsPackage -Online -PackagePath "D:\LangPacks\es-es\lp.cab"
Set-WinSystemLocale es-ES
Set-WinUserLanguageList -LanguageList es-ES -Force
Set-WinUILanguageOverride es-ES
Set-Culture es-ES
Restart-Computer

Alternative via Capabilities (selon build)

Add-WindowsCapability -Online -Name Language.Basic~~~es-ES~0.0.1.0

Avec ces éléments, vous disposez d’une méthode claire et entièrement supportée pour transformer votre parc en es‑ES sans surprises.

Sommaire