ef7128111a
- 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
231 lines
5.4 KiB
Markdown
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`
|