# 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:** ```powershell $WingetPath = "C:\Windows\System32\config\systemprofile\..." $LogDirectory = "C:\Windows\Logs\MDT_Apps" ``` **Après:** ```powershell $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é:** ```powershell $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é:** ```powershell & 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 SilentlyContinue` où 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): ```batch 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:** ```powershell # 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: ```powershell # Vérifier les permissions: icacls "C:\Windows\Logs" /grant "NT AUTHORITY\SYSTEM:(F)" ``` --- ### Problème d'utilisateur lors de l'exécution **Causes possibles:** 1. Script exécuté en contexte Utilisateur au lieu de SYSTEM 2. Variables d'environnement utilisateur pas disponibles en SYSTEM 3. Dossier Apps inaccessible depuis le contexte SYSTEM **Diagnostic:** ```powershell # 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): ```powershell cd "C:\Path\To\WingetRepo$" .\Prepare-Winget.ps1 ``` ### Pour MDT USB: 1. Copier le dossier `WingetRepo$` dans `\Scripts\` du DeployRoot MDT 2. Appeler dans la séquence de tâches MDT: ``` PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\WingetRepo$\Prepare-Winget.ps1" ``` 3. 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: 1. **Vérifier les logs:** ```powershell Get-Content "C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log" -Tail 50 ``` 2. **Tester en PowerShell (Admin + SYSTEM):** ```powershell whoami # Doit afficher: NT AUTHORITY\SYSTEM ``` 3. **Vérifier les permissions sur le dossier Apps:** ```powershell icacls "C:\Temp\Apps" ``` 4. **Vérifier la version Winget:** ```powershell winget --version ``` --- ## ✉️ Support Pour toute question ou issue, consultez les logs MDT: - `C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log` - `C:\Windows\Panther\setuperr.log`