Files
Infra-LAB/projects/MDT/Scripts/WingetRepo$/README_MDT_COMPATIBILITY.md
T
Almeyric ef7128111a feat: Moderniser scripts Winget pour compatibilité MDT USB
- 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
2026-06-08 18:25:44 +02:00

231 lines
5.4 KiB
Markdown

# 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`