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

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 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):

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:

  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:

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

  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:

    Get-Content "C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log" -Tail 50
    
  2. Tester en PowerShell (Admin + SYSTEM):

    whoami  # Doit afficher: NT AUTHORITY\SYSTEM
    
  3. Vérifier les permissions sur le dossier Apps:

    icacls "C:\Temp\Apps"
    
  4. Vérifier la version Winget:

    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