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
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
# =========================================================================
|
||||
# INSTALL-APPS.PS1 - Installation des applications via Winget
|
||||
# Exécution en contexte SYSTEM lors du déploiement MDT
|
||||
# =========================================================================
|
||||
|
||||
# =========================================================================
|
||||
# 0. CONFIGURATION DU CONTEXTE ET VARIABLES DYNAMIQUES
|
||||
# =========================================================================
|
||||
$SystemRoot = $env:SystemRoot # C:\Windows
|
||||
$SystemDrive = $env:SystemDrive # C:
|
||||
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
|
||||
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
|
||||
|
||||
Write-Host "========================================================" -ForegroundColor Cyan
|
||||
Write-Host " CONFIGURATION CONTEXTE MDT"
|
||||
Write-Host "========================================================" -ForegroundColor Cyan
|
||||
Write-Host "Utilisateur: $CurrentUser (SYSTEM: $IsSystem)"
|
||||
Write-Host "SystemRoot: $SystemRoot"
|
||||
Write-Host "SystemDrive: $SystemDrive"
|
||||
|
||||
# =========================================================================
|
||||
# 1. CONFIGURATION DU FICHIER LOG WINDOWS (Chemin dynamique)
|
||||
# =========================================================================
|
||||
$LogDirectory = Join-Path $SystemRoot "Logs\MDT_Apps"
|
||||
if (!(Test-Path $LogDirectory)) {
|
||||
$null = New-Item -ItemType Directory -Force -Path $LogDirectory -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
$DateStamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
||||
$LogPath = Join-Path $LogDirectory "Installation_Applications_$DateStamp.log"
|
||||
|
||||
Write-Host "Répertoire logs: $LogDirectory"
|
||||
|
||||
# Début de l'enregistrement
|
||||
Start-Transcript -Path $LogPath -Append -Force
|
||||
|
||||
Write-Host "========================================================"
|
||||
Write-Host " DEBUT DU SCRIPT D'INSTALLATION DES APPLICATIONS"
|
||||
Write-Host " Fichier log : $LogPath"
|
||||
Write-Host "========================================================"
|
||||
|
||||
# =========================================================================
|
||||
# 2. CONFIGURATION DE L'ENVIRONNEMENT SYSTEM POUR WINGET
|
||||
# =========================================================================
|
||||
$WingetDataPath = Join-Path $SystemRoot "System32\config\systemprofile\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState"
|
||||
|
||||
if (!(Test-Path $WingetDataPath)) {
|
||||
$null = New-Item -ItemType Directory -Force -Path $WingetDataPath -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
$SettingsFile = Join-Path $WingetDataPath "settings.json"
|
||||
$Settings = @'
|
||||
{
|
||||
"telemetry": { "disabled": true },
|
||||
"security": { "anySource": true },
|
||||
"installBehavior": { "preferences": { "scope": "machine" } }
|
||||
}
|
||||
'@
|
||||
|
||||
try {
|
||||
$Settings | Out-File $SettingsFile -Encoding utf8 -Force
|
||||
Write-Host "Configuration Winget: OK"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur configuration Winget: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 3. VERIFICATION / UPGRADE WINGET V7
|
||||
# =========================================================================
|
||||
Write-Host ""
|
||||
Write-Host "========================================================"
|
||||
Write-Host " VERIFICATION WINGET V7"
|
||||
Write-Host "========================================================"
|
||||
|
||||
try {
|
||||
$WingetVersion = & winget --version 2>$null
|
||||
Write-Host "Version actuelle: $WingetVersion"
|
||||
|
||||
# Upgrade si nécessaire
|
||||
Write-Host "Tentative de mise à jour Winget..."
|
||||
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
|
||||
Start-Sleep -Seconds 2
|
||||
|
||||
$NewVersion = & winget --version 2>$null
|
||||
Write-Host "Version après upgrade: $NewVersion"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur lors de la gestion Winget: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Activation des manifests locaux
|
||||
try {
|
||||
& winget settings --enable LocalManifestFiles 2>$null | Out-Null
|
||||
Write-Host "Manifests locaux: Activés"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur activation manifests: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 4. RECHERCHE ET TRAITEMENT DES APPLICATIONS
|
||||
# =========================================================================
|
||||
Write-Host ""
|
||||
Write-Host "========================================================"
|
||||
Write-Host " RECHERCHE DES MANIFESTS D'APPLICATION"
|
||||
Write-Host "========================================================"
|
||||
|
||||
$AppsFolder = Join-Path $PSScriptRoot "Apps"
|
||||
Write-Host "Dossier des applications: $AppsFolder"
|
||||
|
||||
if (!(Test-Path $AppsFolder)) {
|
||||
Write-Error "Dossier Applications introuvable: $AppsFolder"
|
||||
Stop-Transcript
|
||||
exit 1
|
||||
}
|
||||
|
||||
$Manifests = Get-ChildItem -Path $AppsFolder -Filter "*.yaml" -ErrorAction SilentlyContinue
|
||||
$TotalApps = $Manifests.Count
|
||||
|
||||
Write-Host "Manifests trouvés: $TotalApps"
|
||||
|
||||
if ($TotalApps -eq 0) {
|
||||
Write-Warning "Aucun fichier manifest .yaml trouvé dans $AppsFolder"
|
||||
Stop-Transcript
|
||||
exit 1
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 5. FONCTION DE VERIFICATION D'INSTALLATION
|
||||
# =========================================================================
|
||||
function Test-IsAppInstalled {
|
||||
[CmdletBinding()]
|
||||
param([string]$AppName)
|
||||
|
||||
try {
|
||||
$Paths = @(
|
||||
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
|
||||
"HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
|
||||
)
|
||||
$Result = Get-ItemProperty $Paths -ErrorAction SilentlyContinue | `
|
||||
Where-Object { $_.DisplayName -and $_.DisplayName -like "*$AppName*" }
|
||||
return ($null -ne $Result)
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur lors de la vérification $AppName : $($_.Exception.Message)"
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 6. PIPELINE DE TRAITEMENT DES APPLICATIONS
|
||||
# =========================================================================
|
||||
Write-Host ""
|
||||
Write-Host "========================================================"
|
||||
Write-Host " INSTALLATION DES APPLICATIONS"
|
||||
Write-Host "========================================================"
|
||||
|
||||
$Global:CurrentAppIndex = 0
|
||||
|
||||
$Manifests | ForEach-Object {
|
||||
$Global:CurrentAppIndex++
|
||||
$Manifest = $_
|
||||
|
||||
$CleanName = ($Manifest.BaseName -split "_")[0]
|
||||
$Sanitized = $CleanName -replace '[^a-zA-Z0-9]', ''
|
||||
|
||||
Write-Host "[$Global:CurrentAppIndex/$TotalApps] Vérification : $CleanName" -ForegroundColor Cyan
|
||||
|
||||
if (Test-IsAppInstalled -AppName $CleanName) {
|
||||
Write-Host " -> PASSER : Déjà installé." -ForegroundColor Yellow
|
||||
return
|
||||
}
|
||||
|
||||
$InstallerFile = Get-ChildItem -Path $AppsFolder | Where-Object {
|
||||
$_.Extension -in ".exe", ".msi" -and `
|
||||
($_.Name -ilike "*$Sanitized*" -or $_.Name -ilike "*$CleanName*")
|
||||
} | Select-Object -First 1
|
||||
|
||||
if (!$InstallerFile) {
|
||||
Write-Host " -> ÉCHEC : Fichier installateur introuvable pour $CleanName" -ForegroundColor Red
|
||||
return
|
||||
}
|
||||
|
||||
$FullFileName = $InstallerFile.Name.ToLower()
|
||||
$Executable = $InstallerFile.FullName
|
||||
$Arguments = "/S"
|
||||
|
||||
# =========================================================================
|
||||
# Détermination des arguments selon le type de fichier
|
||||
# =========================================================================
|
||||
if ($InstallerFile.Extension -eq ".msi") {
|
||||
$Executable = "msiexec.exe"
|
||||
$Arguments = "/i `"$($InstallerFile.FullName)`" /qn /norestart"
|
||||
|
||||
if (Get-Process -Name "msiexec" -ErrorAction SilentlyContinue) {
|
||||
Write-Host " -> Nettoyage processus msiexec..." -ForegroundColor DarkYellow
|
||||
Stop-Process -Name "msiexec" -Force -ErrorAction SilentlyContinue
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch -regex ($FullFileName) {
|
||||
"7z|7zip" { $Arguments = "/S" }
|
||||
"notepad" { $Arguments = "/S" }
|
||||
"vlc" { $Arguments = "/S" }
|
||||
"audacity" { $Arguments = "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART" }
|
||||
"python" { $Arguments = "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0" }
|
||||
default { $Arguments = "/S" }
|
||||
}
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# Exécution de l'installation
|
||||
# =========================================================================
|
||||
try {
|
||||
Write-Host " -> Installation: $($InstallerFile.Name)" -ForegroundColor White
|
||||
Write-Host " Exécutable: $Executable"
|
||||
Write-Host " Arguments: $Arguments"
|
||||
|
||||
$Process = Start-Process -FilePath $Executable -ArgumentList $Arguments `
|
||||
-NoNewWindow -Wait -PassThru -ErrorAction Stop
|
||||
|
||||
$ExitCode = $Process.ExitCode
|
||||
if ($ExitCode -eq 0 -or $ExitCode -eq 3010) {
|
||||
Write-Host " -> SUCCÈS (Code: $ExitCode)`n" -ForegroundColor Green
|
||||
}
|
||||
else {
|
||||
Write-Host " -> ÉCHEC. Code erreur: $ExitCode" -ForegroundColor Red
|
||||
Write-Host " Args: $Arguments`n" -ForegroundColor DarkRed
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host " -> ERREUR CRITIQUE: $($_.Exception.Message)`n" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 7. FINALISATION
|
||||
# =========================================================================
|
||||
Write-Host "========================================================"
|
||||
Write-Host " TRAITEMENT TERMINÉ"
|
||||
Write-Host "========================================================"
|
||||
Write-Host "Logs disponibles: $LogPath"
|
||||
|
||||
Stop-Transcript
|
||||
@@ -0,0 +1,98 @@
|
||||
# =========================================================================
|
||||
# PREPARE-WINGET.PS1 - Configuration de Winget pour MDT SYSTEM
|
||||
# =========================================================================
|
||||
# Ce script doit s'exécuter en contexte SYSTEM lors du déploiement MDT
|
||||
|
||||
# =========================================================================
|
||||
# 1. VERIFICATION DU CONTEXTE D'EXECUTION
|
||||
# =========================================================================
|
||||
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
|
||||
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
|
||||
|
||||
if (-not $IsSystem) {
|
||||
Write-Warning "ATTENTION: Ce script devrait s'exécuter en contexte SYSTEM"
|
||||
Write-Warning "Utilisateur courant: $CurrentUser"
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 2. CONSTRUCTION DES CHEMINS (Dynamiques, pas en dur)
|
||||
# =========================================================================
|
||||
$SystemRoot = $env:SystemRoot # C:\Windows
|
||||
$SystemDrive = $env:SystemDrive # C:
|
||||
$WingetDataPath = "$SystemRoot\System32\config\systemprofile\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState"
|
||||
|
||||
Write-Host "Chemin racine système: $SystemRoot"
|
||||
Write-Host "Chemin données Winget: $WingetDataPath"
|
||||
|
||||
# =========================================================================
|
||||
# 3. CREATION DES DOSSIERS NECESSAIRES
|
||||
# =========================================================================
|
||||
if (!(Test-Path $WingetDataPath)) {
|
||||
Write-Host "Création du dossier: $WingetDataPath"
|
||||
$null = New-Item -ItemType Directory -Force -Path $WingetDataPath -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 4. CONFIGURATION WINGET (JSON)
|
||||
# =========================================================================
|
||||
$SettingsFile = "$WingetDataPath\settings.json"
|
||||
$Settings = @'
|
||||
{
|
||||
"telemetry": { "disabled": true },
|
||||
"security": { "anySource": true },
|
||||
"installBehavior": { "preferences": { "scope": "machine" } }
|
||||
}
|
||||
'@
|
||||
|
||||
try {
|
||||
$Settings | Out-File $SettingsFile -Encoding utf8 -Force
|
||||
Write-Host "Settings Winget créé: $SettingsFile"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur lors de la création des settings: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 5. UPGRADE WINGET VERS V7 (avant utilisation)
|
||||
# =========================================================================
|
||||
Write-Host "Vérification/Upgrade de Winget..." -ForegroundColor Yellow
|
||||
|
||||
try {
|
||||
# Tenter de mettre à jour Winget vers la dernière version
|
||||
Write-Host "Mise à jour de Winget en cours..."
|
||||
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Impossible de mettre à jour Winget: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Vérifier la version actuelle
|
||||
$WingetVersion = & winget --version 2>$null
|
||||
Write-Host "Version Winget: $WingetVersion"
|
||||
|
||||
# =========================================================================
|
||||
# 6. ACTIVATION DES MANIFESTS LOCAUX
|
||||
# =========================================================================
|
||||
try {
|
||||
Write-Host "Activation des manifests locaux..."
|
||||
& winget settings --enable LocalManifestFiles 2>$null | Out-Null
|
||||
Write-Host "Manifests locaux activés avec succès"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Erreur lors de l'activation des manifests: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# 7. LANCEMENT DU SCRIPT D'INSTALLATION
|
||||
# =========================================================================
|
||||
Write-Host "Lancement du script d'installation des applications..." -ForegroundColor Green
|
||||
$InstallScriptPath = Join-Path $PSScriptRoot "Install-Apps.ps1"
|
||||
|
||||
if (Test-Path $InstallScriptPath) {
|
||||
& "$InstallScriptPath"
|
||||
}
|
||||
else {
|
||||
Write-Error "Script d'installation introuvable: $InstallScriptPath"
|
||||
exit 1
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user