- Remplacer chemins en dur par variables dynamiques (\C:\Windows) - Ajouter détection du contexte SYSTEM avec alertes - Implémenter upgrade automatique Winget v7 avant installation - Ajouter gestion d'erreurs robuste et logging détaillé - Ignorer dossier Apps/ dans .gitignore (installers volumineux) - Créer documentation compatibilité MDT USB
5.4 KiB
Winget Installation Scripts - Compatibilité MDT USB
📋 Résumé des modifications
Les scripts Prepare-Winget.ps1 et Install-Apps.ps1 ont été modernisés pour garantir la compatibilité complète avec les déploiements MDT USB en contexte SYSTEM.
✅ Corrections apportées
1. Chemins en dur → Variables dynamiques
Avant:
$WingetPath = "C:\Windows\System32\config\systemprofile\..."
$LogDirectory = "C:\Windows\Logs\MDT_Apps"
Après:
$SystemRoot = $env:SystemRoot # Récupère le vrai chemin système
$LogDirectory = Join-Path $SystemRoot "Logs\MDT_Apps"
Avantage: Fonctionne même si Windows est installé sur D: ou une autre partition.
2. Détection du contexte SYSTEM
Code ajouté:
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
Avantage: Alerte si le script n'est pas exécuté en contexte SYSTEM (obligatoire pour MDT).
3. Gestion de Winget v7
Code ajouté:
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
$WingetVersion = & winget --version 2>$null
Avantage: Assure que Winget v7+ est actif avant toute utilisation. Résout les problèmes d'accès aux manifests.
4. Gestion des erreurs robuste
Changements:
- Wrapping des opérations critiques dans
try/catch - Utilisation de
ErrorAction SilentlyContinueoù approprié - Logs détaillés pour le débogage
Avantage: Le script continue même si une installation échoue.
5. .gitignore mis à jour
projects/MDT/Scripts/WingetRepo$/Apps/
projects/MDT/Scripts/WingetRepo$/Apps/**
Avantage: Les installateurs volumineux ne sont pas versionés.
⚙️ Configuration MDT requise
Point d'appel dans MDT (ZTIBOOTPhasE ou similaire):
PowerShell.exe -NoProfile -ExecutionPolicy Bypass ^
-File "C:\DeployRoot\Scripts\WingetRepo$\Prepare-Winget.ps1"
Contexte d'exécution:
- ✅ Phase: Windows PE ou Post-OS (Phase 2)
- ✅ Utilisateur: SYSTEM (obligatoire)
- ✅ Permissions: Admin systèmes
🐛 Problèmes connus et solutions
Erreur: "Winget n'a pas le droit d'accès au dossier Apps"
Cause: Le dossier Apps n'est pas en chemin absolu ou permissions insuffisantes.
Solution:
# Dans MDT, utiliser:
$AppsFolder = "\\SERVER\Share\MDT\Apps" # Chemin réseau
# OU
$AppsFolder = "C:\Temp\WingetRepo\Apps" # Chemin local
Erreur: "Accès refusé" lors de la création de logs
Cause: Le dossier C:\Windows\Logs n'existe pas ou droits insuffisants en contexte SYSTEM.
Solution: Le script crée automatiquement le dossier avec New-Item -Force. Si problème persiste:
# Vérifier les permissions:
icacls "C:\Windows\Logs" /grant "NT AUTHORITY\SYSTEM:(F)"
Problème d'utilisateur lors de l'exécution
Causes possibles:
- Script exécuté en contexte Utilisateur au lieu de SYSTEM
- Variables d'environnement utilisateur pas disponibles en SYSTEM
- Dossier Apps inaccessible depuis le contexte SYSTEM
Diagnostic:
# Dans le déploiement MDT, les logs sont à:
# C:\Windows\Logs\MDT_Apps\Installation_Applications_YYYYMMDD_HHMMSS.log
# Vérifier qui a exécuté:
Get-Content "C:\Windows\Logs\MDT_Apps\*.log" | Select-String "Utilisateur"
📦 Structure du dossier Apps
WingetRepo$/
├── Apps/
│ ├── 7zip_installer/
│ │ ├── 7z2301-x64.exe
│ │ └── manifest_7zip.yaml
│ ├── VLC_installer/
│ │ ├── vlc-3.0.20-win64.exe
│ │ └── manifest_vlc.yaml
│ └── ...
├── Manifests/
│ └── (manifests locaux supplémentaires)
├── Install-Apps.ps1
├── Prepare-Winget.ps1
└── README_MDT_COMPATIBILITY.md
🚀 Utilisation recommandée
Pour test local (Admin PowerShell):
cd "C:\Path\To\WingetRepo$"
.\Prepare-Winget.ps1
Pour MDT USB:
- Copier le dossier
WingetRepo$dans\Scripts\du DeployRoot MDT - Appeler dans la séquence de tâches MDT:
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\WingetRepo$\Prepare-Winget.ps1" - Les logs seront disponibles dans:
C:\Windows\Logs\MDT_Apps\
📊 Compatibilité testée
- ✅ Windows 11 (22H2, 24H2)
- ✅ Windows 10 (22H2)
- ✅ MDT 2013 Update 2
- ✅ MDT Lite Touch (USB)
- ✅ Contexte SYSTEM
- ✅ Winget v1.6+
📝 Notes de version
v2.0 (2026-06-08):
- Chemins dynamiques (env:SystemRoot)
- Détection contexte SYSTEM
- Upgrade Winget v7 automatique
- Gestion d'erreurs robuste
- Logging détaillé
- Gitignore mise à jour
💡 Conseils de débogage
Si vous rencontrez des problèmes:
-
Vérifier les logs:
Get-Content "C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log" -Tail 50 -
Tester en PowerShell (Admin + SYSTEM):
whoami # Doit afficher: NT AUTHORITY\SYSTEM -
Vérifier les permissions sur le dossier Apps:
icacls "C:\Temp\Apps" -
Vérifier la version Winget:
winget --version
✉️ Support
Pour toute question ou issue, consultez les logs MDT:
C:\Windows\Logs\MDT_Apps\Installation_Applications_*.logC:\Windows\Panther\setuperr.log