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é.
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)
Canal | Conditions d’accès | Fichier à récupérer |
---|---|---|
Visual Studio (ancien MSDN) – “Downloads and Keys” | Abonnement VS actif | ISO Windows Server Language Packs (contient tous les .cab ) |
Volume Licensing Service Center (VLSC) | Licence en volume / Software Assurance | Mê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
- Montez l’ISO téléchargé depuis l’un des canaux ci‑dessus.
- 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.). - 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)
Besoin | Capability | Quand l’installer |
---|---|---|
Interface utilisateur espagnole | Language.Basic~~~es-ES~0.0.1.0 | Toujours (socle) |
Reconnaissance optique de caractères | Language.OCR~~~es-ES~0.0.1.0 | Serveurs qui traitent des images ou des PDF scannés |
Reconnaissance vocale | Language.Speech~~~es-ES~0.0.1.0 | Cas spécifiques (dictée/commande vocale) |
Synthèse vocale | Language.TextToSpeech~~~es-ES~0.0.1.0 | Lecture de texte |
Écriture manuscrite | Language.Handwriting~~~es-ES~0.0.1.0 | Peu 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 :
<unattend>
<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>
</unattend>
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épertoireC:\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 / Code | Cause probable | Correctif |
---|---|---|
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-WindowsCapability | Le serveur tente WSUS et ne contacte pas Windows Update | Utiliser -Source local + -LimitAccess ou installer via Add-WindowsPackage avec le .cab |
0x800f0831 | Composants de base manquants, stockage source absent | Monter l’ISO de fonctionnalités/LP adéquat et référencer la source locale |
Interface restée en anglais après redémarrage | Paramètres UILanguageOverride / profil par défaut non copiés | Exécuter Set-WinUILanguageOverride es-ES et appliquer un unattend pour l’écran d’accueil |
Serveur Core : pas d’interface de configuration | Comportement normal | Toutes 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
Canal | Accès | Téléchargement |
---|---|---|
Visual Studio (MSDN) | Abonnement VS | ISO “Windows Server Language Packs” |
VLSC | Licence en volume / SA | Mê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.