Files
Windows/powershell/libres-softwares-install.ps1

141 lines
6.1 KiB
PowerShell

# 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")