# Script d'installation de logiciels avec winget # Permet de choisir les logiciels a installer # Verification que winget est installe if (-not (Get-Command winget -ErrorAction SilentlyContinue)) { Write-Host "ERREUR: winget n'est pas installe sur ce systeme." -ForegroundColor Red Write-Host "Veuillez installer le 'App Installer' depuis le Microsoft Store." -ForegroundColor Yellow exit 1 } Write-Host "===========================================================" -ForegroundColor Cyan Write-Host " Script d'installation de logiciels avec winget" -ForegroundColor Cyan Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" # Liste des logiciels disponibles avec leurs ID winget $logiciels = @( @{Nom = "Firefox ESR (FR)"; ID = "Mozilla.Firefox.ESR.fr"; Description = "Navigateur web Mozilla Firefox ESR"}, @{Nom = "7-Zip"; ID = "7zip.7zip"; Description = "Gestionnaire d'archives"}, @{Nom = "VLC Media Player"; ID = "VideoLAN.VLC"; Description = "Lecteur multimedia"}, @{Nom = "OnlyOffice"; ID = "ONLYOFFICE.DesktopEditors"; Description = "Suite bureautique"}, @{Nom = "LibreOffice"; ID = "TheDocumentFoundation.LibreOffice"; Description = "Suite bureautique libre"}, @{Nom = "GIMP"; ID = "GIMP.GIMP.3"; Description = "Editeur d'images"}, @{Nom = "Inkscape"; ID = "Inkscape.Inkscape"; Description = "Editeur de graphiques vectoriels"}, @{Nom = "Chromium"; ID = "Hibbiki.Chromium"; Description = "Navigateur web open source"}, @{Nom = "Bitwarden"; ID = "Bitwarden.Bitwarden"; Description = "Gestionnaire de mots de passe"}, @{Nom = "Thunderbird"; ID = "Mozilla.Thunderbird"; Description = "Client de messagerie"} ) # Affichage de la liste des logiciels Write-Host "Logiciels disponibles a l'installation :" -ForegroundColor Green Write-Host "" for ($i = 0; $i -lt $logiciels.Count; $i++) { Write-Host ("{0,2}. [{1}] {2}" -f ($i + 1), " ", $logiciels[$i].Nom) -ForegroundColor White Write-Host (" {0}" -f $logiciels[$i].Description) -ForegroundColor Gray } Write-Host "" Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" # Selection des logiciels Write-Host "Entrez les numeros des logiciels a installer (separes par des virgules)" -ForegroundColor Yellow Write-Host "Exemple: 1,3,5 ou tapez 'tous' pour tout installer" -ForegroundColor Yellow Write-Host "" $choix = Read-Host "Votre choix" # Traitement du choix $logicielsAInstaller = @() if ($choix.ToLower() -eq "tous" -or $choix.ToLower() -eq "all") { $logicielsAInstaller = $logiciels Write-Host "`nTous les logiciels seront installes." -ForegroundColor Green } else { $numeros = $choix -split ',' | ForEach-Object { $_.Trim() } foreach ($num in $numeros) { if ($num -match '^\d+$') { $index = [int]$num - 1 if ($index -ge 0 -and $index -lt $logiciels.Count) { $logicielsAInstaller += $logiciels[$index] } else { Write-Host "Numero invalide ignore: $num" -ForegroundColor Red } } } } if ($logicielsAInstaller.Count -eq 0) { Write-Host "`nAucun logiciel selectionne. Fin du script." -ForegroundColor Yellow exit 0 } # Confirmation Write-Host "`n===========================================================" -ForegroundColor Cyan Write-Host "Logiciels selectionnes pour l'installation :" -ForegroundColor Green foreach ($log in $logicielsAInstaller) { Write-Host " - $($log.Nom)" -ForegroundColor White } Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" $confirmation = Read-Host "Confirmer l'installation ? (O/N)" if ($confirmation -notmatch '^[oOyY]') { Write-Host "`nInstallation annulee." -ForegroundColor Yellow exit 0 } # Installation des logiciels Write-Host "`n===========================================================" -ForegroundColor Cyan Write-Host "Debut de l'installation..." -ForegroundColor Green Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" $reussites = 0 $echecs = 0 $resultats = @() foreach ($logiciel in $logicielsAInstaller) { Write-Host "`nInstallation de $($logiciel.Nom)..." -ForegroundColor Cyan Write-Host "ID winget: $($logiciel.ID)" -ForegroundColor Gray try { # Installation avec winget $process = Start-Process -FilePath "winget" -ArgumentList "install", "--id", $logiciel.ID, "--silent", "--accept-source-agreements", "--accept-package-agreements" -NoNewWindow -Wait -PassThru if ($process.ExitCode -eq 0) { Write-Host "OK $($logiciel.Nom) installe avec succes" -ForegroundColor Green $reussites++ $resultats += @{Logiciel = $logiciel.Nom; Statut = "Succes"} } else { Write-Host "ERREUR Echec de l'installation de $($logiciel.Nom) (Code: $($process.ExitCode))" -ForegroundColor Red $echecs++ $resultats += @{Logiciel = $logiciel.Nom; Statut = "Echec"} } } catch { Write-Host "ERREUR lors de l'installation de $($logiciel.Nom): $_" -ForegroundColor Red $echecs++ $resultats += @{Logiciel = $logiciel.Nom; Statut = "Erreur"} } } # Resume de l'installation Write-Host "`n===========================================================" -ForegroundColor Cyan Write-Host "Resume de l'installation" -ForegroundColor Cyan Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" foreach ($resultat in $resultats) { if ($resultat.Statut -eq "Succes") { Write-Host "[OK] $($resultat.Logiciel): $($resultat.Statut)" -ForegroundColor Green } else { Write-Host "[X] $($resultat.Logiciel): $($resultat.Statut)" -ForegroundColor Red } } Write-Host "" Write-Host "Total: $reussites reussite(s), $echecs echec(s)" -ForegroundColor $(if ($echecs -eq 0) { "Green" } else { "Yellow" }) Write-Host "===========================================================" -ForegroundColor Cyan Write-Host "" Write-Host "Appuyez sur une touche pour quitter..." $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")