?️ Script PowerShell complet i robust per instal·lar veus OneCore

powershell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
C:\tts\instal·la-veus-onecore.ps1

Idiomes i veus que vols instal·lar

$languageTags = @(
«en-US», # English (US)
«en-GB», # English (UK)
«es-ES», # Spanish (Spain)
«ca-ES», # Catalan (Spain)
«fr-FR», # French (France)
«de-DE» # German
)

Obté la llista actual d’idiomes

$currentLangs = Get-WinUserLanguageList | ForEach-Object { $_.LanguageTag }

foreach ($lang in $languageTags) {
Write-Host «? Processant $lang…» -ForegroundColor Cyan
try {
# Afegeix l’idioma si no hi és
if (-not ($currentLangs -contains $lang)) {
Write-Host «➕ Afegint idioma $lang…»
$langList = Get-WinUserLanguageList
$langList.Add($lang)
Set-WinUserLanguageList $langList -Force
} else {
Write-Host «✔️ L’idioma $lang ja està instal·lat.»
}

    # Comprova si la veu bàsica ja està instal·lada
    $capability = "Language.$lang~Basic~~~"
    $installed = Get-WindowsCapability -Online | Where-Object { $_.Name -eq $capability }
    if ($installed.State -ne "Installed") {
        Write-Host "⬇️ Instal·lant veu bàsica per a $lang..."
        Add-WindowsCapability -Online -Name $capability -ErrorAction Stop
    } else {
        Write-Host "✔️ Veu bàsica ja instal·lada per a $lang."
    }

    # Instal·la reconeixement de veu si no hi és
    $speechCap = "Language.$lang~Speech~~~"
    $speechInstalled = Get-WindowsCapability -Online | Where-Object { $_.Name -eq $speechCap }
    if ($speechInstalled.State -ne "Installed") {
        Write-Host "?️ Instal·lant reconeixement de veu per a $lang..."
        Add-WindowsCapability -Online -Name $speechCap -ErrorAction SilentlyContinue
    } else {
        Write-Host "✔️ Reconeixement de veu ja instal·lat per a $lang."
    }

} catch {
   Write-Warning ("Error instal·lant per a $lang: " + $_.Exception.Message)

}

}

Mostra les veus disponibles al final

Write-Host «`n? Veus SAPI instal·lades:» -ForegroundColor Yellow
Add-Type -AssemblyName System.Speech
(New-Object System.Speech.Synthesis.SpeechSynthesizer).GetInstalledVoices() |
ForEach-Object { «• » + $_.VoiceInfo.Name }