141 lines
6.1 KiB
PowerShell
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") |