[PowerShell] WinAutoCheck_AAZ.ps1 : Un outil automatisé de vérification et de réparation système Windows

Vous trouverez ici des scripts pour faciliter la gestion de votre ordinateur. Ils sont proposés tels quels par le rédacteur du message. La team ne vérifie pas la qualité de ces éléments et n'assure pas le support ni la maintenance. Vous les utilisez sous votre seule responsabilité.
Règles du forum
Pour les créateurs de scripts

Veuillez noter que les scripts que vous partagez ici sont proposés tels quels et la team ne vérifie pas leur qualité.
Nous vous rappelons que nous n'assurons ni le support ni la maintenance des scripts publiés.

Pour faciliter leur utilisation par les autres membres de la communauté, respectez ces consignes :
.
  • Utilisez les préfixes de langage pour taguer les messages.
  • Assurez-vous que vos scripts sont clairs et bien documentés
.
Merci de votre compréhension et de votre contribution.
Verrouillé
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1131
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 104 fois
A été remercié : 111 fois
    Windows 10 Firefox

[PowerShell] WinAutoCheck_AAZ.ps1 : Un outil automatisé de vérification et de réparation système Windows

Message par pboulanger »

Bonjour à tous

Ce script PowerShell, intitulé WinAutoCheck_AAZ, est conçu pour automatiser la vérification et la réparation des fichiers système sous Windows (SFC et DSIM), tout en offrant une interface utilisateur conviviale et lisible.

Le code commenté

Code : Tout sélectionner

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# Nom du logiciel : WinAutoCheck_AAZ
# Auteur : PiB pour TEAM-AAZ
# Version : 1.0.0.a (Janvier 2025)
# Codage : UTF 8
# --------------------------------------

Write-Host "Nom du logiciel : WinAutoCheck_AAZ" -ForegroundColor Cyan
Write-Host "Auteur : PiB pour TEAM-AAZ" -ForegroundColor Cyan
Write-Host "Version : 1.0.0.a (Janvier 2025)" -ForegroundColor Cyan
Write-Host "--------------------------------------" -ForegroundColor Cyan

# Vérification si le script est exécuté avec les droits administrateur
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host "Ce script nécessite des privilèges administrateurs pour fonctionner." -ForegroundColor Red

    Write-Host "Relance du script en mode administrateur..." -ForegroundColor Cyan

    # Préparation du script pour une réexécution en mode administrateur
    $currentScript = $MyInvocation.MyCommand.Definition
    Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$currentScript`"" -Verb RunAs
    exit
}

Write-Host ""
Write-Host "Script exécuté en tant qu'administrateur.
" -ForegroundColor Green

# Vérification et activation de l'exécution des scripts si nécessaire

Write-Host "Vérification de la stratégie d'exécution PowerShell...
" -ForegroundColor Cyan

$currentPolicy = Get-ExecutionPolicy
if ($currentPolicy -ne 'RemoteSigned' -and $currentPolicy -ne 'Unrestricted') {
    Write-Host "La stratégie actuelle est : $currentPolicy.
" -ForegroundColor Yellow

    Write-Host "Modification en cours pour permettre l'exécution des scripts locaux signés (RemoteSigned).
" -ForegroundColor Cyan

    Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
    Write-Host ""
	Write-Host "Stratégie d'exécution modifiée avec succès : RemoteSigned." -ForegroundColor Green
} else {
    Write-Host ""
	Write-Host "La stratégie d'exécution actuelle permet déjà l'exécution des scripts : $currentPolicy." -ForegroundColor Green
}

# Étape 1 : Vérification et réparation des fichiers système avec SFC

Write-Host ""
Write-Host "Exécution de la commande SFC /scannow..." -ForegroundColor Cyan

sfc /scannow

# Vérification du résultat
if ($LASTEXITCODE -eq 0) {
   # Write-Host "SFC n'a détecté aucune violation d'intégrité dans les fichiers système." -ForegroundColor Green
	Write-Host ""

} else {
    Write-Host "?? SFC a détecté des erreurs et a tenté des réparations. Passage à l'étape suivante avec DISM..." -ForegroundColor Yellow
	Write-Host ""

    # Étape 2 : Réparation de l'image Windows avec DISM
    Write-Host "Vérification de l'état de l'image avec DISM..." -ForegroundColor Cyan

    dism /Online /Cleanup-Image /CheckHealth

    Write-Host "Analyse des erreurs potentielles avec DISM..." -ForegroundColor Cyan
Write-Host ""
    dism /Online /Cleanup-Image /ScanHealth

    Write-Host "Tentative de réparation de l'image Windows avec DISM..." -ForegroundColor Cyan
Write-Host ""

    dism /Online /Cleanup-Image /RestoreHealth

    # Résumé
    if ($LASTEXITCODE -eq 0) {
        Write-Host "L'image Windows a été réparée avec succès." -ForegroundColor Green
Write-Host ""
    } else {
        Write-Host "Impossible de réparer l'image Windows. Une intervention manuelle peut être nécessaire." -ForegroundColor Red
Write-Host ""
    }
}

# Rétablissement de la stratégie d'exécution initiale 

Write-Host ""
Write-Host "Rétablissement de la stratégie d'exécution initiale (si nécessaire)..." -ForegroundColor Cyan

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy $currentPolicy -Force
Write-Host ""
Write-Host "Stratégie d'exécution rétablie : $currentPolicy." -ForegroundColor Green
Write-Host ""

Write-Host "Script terminé avec succès." -ForegroundColor Cyan
Write-Host ""


#Write-Host "Appuyez sur une touche pour continuer..." -ForegroundColor Yellow

pause
Ce que fait ce script
  • Vérification des droits administratifs :
    • Le script s'assure qu'il est exécuté avec les privilèges administratifs nécessaires. Si ce n'est pas le cas, il relance automatiquement le script en mode administrateur.
  • Vérification de la stratégie d'exécution PowerShell :
    • Le script vérifie la stratégie d'exécution actuelle et la modifie temporairement si nécessaire pour permettre l'exécution de scripts locaux signés (RemoteSigned).
  • Analyse et réparation des fichiers système avec SFC et DISM :
    • Lance la commande sfc /scannow pour rechercher et corriger les fichiers système corrompus.
      => Si des erreurs sont détectées, il passe automatiquement à des réparations approfondies avec l'outil DISM (/CheckHealth, /ScanHealth, et /RestoreHealth).
  • Rétablissement de la stratégie d'exécution initiale :
    • Une fois les vérifications terminées, le script restaure la stratégie d'exécution PowerShell initiale pour ne pas impacter d'autres scripts.
  • Interface utilisateur claire :
    • Affiche des messages lisibles dans la console, incluant des statuts en couleurs pour indiquer le déroulement de chaque étape.
  • Pause en fin d'exécution :
    • Ajoute une pause à la fin pour permettre à l'utilisateur de lire les résultats avant que la console ne se ferme.
Comment s'en servir ?
  • Enregistrer le code dans un fichier txt avec l'extension .ps1 par exemple WinAutoCheck_AAZ.ps1
  • Clic droit sur l'icône du fichier et commande Exécuter avec PowerShell
  • Des messages de confirmation apparaissent au fur et à mesure de l'exécution du script
  • Le script se ferme à la fin des opérations.
En espérant que cela vous rende service,
Amicalement,

Pierre
Avatar du membre
MyPOV
Membre VIP
Membre VIP
Messages : 1217
Enregistré le : sam. 11 déc. 2021 14:40
A remercié : 111 fois
A été remercié : 155 fois
    Windows 10 Chrome

Re: [PowerShell] WinAutoCheck_AAZ : Un outil automatisé de vérification et de réparation système Windows

Message par MyPOV »

Bonjour,

C'est difficile d'avoir un avis, d'autant plus que c'est un poil téméraire de le tester :D Alors j'ai confié la tâche à Deepseek qui n'en dit que du bien. Il m'est arrivé qu'en programmation, il me propose des améliorations que je trouvais "décalées" par rapport à l'objectif et au public visé, mais rien n'oblige à les prendre en considération, alors autant avoir ses propositions. Enfin, je n'ai pas d'avis sur ce qu'il propose.


Le script que vous avez fourni est bien structuré et semble correctement implémenter les fonctionnalités qu'il vise à accomplir, à savoir la vérification et la réparation des fichiers système sous Windows à l'aide des outils `SFC` (System File Checker) et `DISM` (Deployment Imaging Service and Management Tool). Voici quelques points à considérer et des suggestions pour améliorer le script :

Points positifs :
1. Vérification des droits administrateur : Le script vérifie s'il est exécuté avec les privilèges administrateur, ce qui est essentiel pour exécuter des commandes comme `SFC` et `DISM`. Si ce n'est pas le cas, il se relance automatiquement en mode administrateur.
2. Gestion de la stratégie d'exécution PowerShell : Le script vérifie et modifie temporairement la stratégie d'exécution pour permettre l'exécution des scripts, puis la rétablit à la fin. Cela montre une bonne pratique de gestion des politiques de sécurité.
3. Utilisation de `SFC` et `DISM` : Le script utilise correctement les commandes `SFC /scannow` et `DISM` pour vérifier et réparer les fichiers système et l'image Windows.
4. Gestion des erreurs : Le script vérifie les codes de sortie (`$LASTEXITCODE`) pour déterminer si les commandes ont réussi ou échoué, et il fournit des messages appropriés en fonction des résultats.
5. Commentaires et lisibilité : Le script est bien commenté et structuré, ce qui le rend facile à comprendre et à maintenir.

Suggestions d'amélioration :
1. Journalisation des résultats : Actuellement, les résultats des commandes `SFC` et `DISM` sont affichés dans la console, mais ils ne sont pas enregistrés dans un fichier journal. Il serait utile d'ajouter une journalisation des résultats dans un fichier texte pour un examen ultérieur.

Code : Tout sélectionner

   ```powershell
   $logFile = "$env:TEMP\WinAutoCheck_AAZ.log"
   Start-Transcript -Path $logFile -Append
   ```
   
   Et à la fin du script :
   ```powershell
   Stop-Transcript
   ```
2. Gestion des erreurs plus robuste : Bien que le script vérifie les codes de sortie, il pourrait être amélioré en capturant les erreurs spécifiques et en fournissant des messages d'erreur plus détaillés.
3. Optimisation de la réexécution en mode administrateur : Le script se relance en mode administrateur si nécessaire, mais il pourrait être utile d'ajouter une vérification pour éviter une boucle infinie en cas de problème.
4. Amélioration de l'expérience utilisateur : Le script utilise `pause` à la fin pour attendre une entrée utilisateur, mais il pourrait être amélioré en ajoutant une option pour quitter immédiatement ou pour afficher un résumé des actions effectuées.
5. Gestion des politiques d'exécution : Bien que le script modifie la stratégie d'exécution, il pourrait être utile d'informer l'utilisateur des implications de cette modification, surtout si le script est utilisé dans un environnement professionnel où les politiques de sécurité sont strictes.
6. Compatibilité avec différentes versions de Windows : Le script pourrait inclure des vérifications pour s'assurer qu'il est compatible avec différentes versions de Windows, car certaines commandes ou options peuvent varier.

Exemple de modifications suggérées :

Code : Tout sélectionner

```powershell
# Ajout de la journalisation
$logFile = "$env:TEMP\WinAutoCheck_AAZ.log"
Start-Transcript -Path $logFile -Append
# ...

# Exemple de gestion d'erreur plus robuste
try {
    sfc /scannow
    if ($LASTEXITCODE -ne 0) {
        throw "SFC a rencontré des erreurs."
    }
} catch {
    Write-Host "Erreur lors de l'exécution de SFC : $_" -ForegroundColor Red
}
# ...

# Fin du script avec journalisation
Stop-Transcript
Write-Host "Les résultats ont été enregistrés dans $logFile." -ForegroundColor Cyan
```
Modifié en dernier par MyPOV le mar. 21 janv. 2025 08:44, modifié 2 fois.
"𝓛𝓮 𝓭𝓸𝓾𝓽𝓮 𝓮𝓼𝓽 𝓵𝓮 𝓬𝓸𝓶𝓶𝓮𝓷𝓬𝓮𝓶𝓮𝓷𝓽 𝓭𝓮 𝓵𝓪 𝓼𝓪𝓰𝓮𝓼𝓼𝓮" 𝖠𝗋𝗂𝗌𝗍𝗈𝗍𝖾, 𝖼𝗈𝗆𝗉𝗅𝗈𝗍𝗂𝗌𝗍𝖾 𝖦𝗋𝖾𝖼
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1131
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 104 fois
A été remercié : 111 fois
    Windows 10 Firefox

Re: [PowerShell] WinAutoCheck_AAZ : Un outil automatisé de vérification et de réparation système Windows

Message par pboulanger »

Bonjour Mpov,

Un grand Merci pour ces commentaires et suggestions, j'apprécie !

Elles sont judicieuses et je vais les prendre en compte, les tester et proposer, le cas échant une version 1.1.0.0.a de ce script.
  • Proposition de LOG : OK
  • Gestion des erreurs : je vais regarder cela en détail car je n'ai jamais fait ce genre de gestion en PWS.
  • Gestion de la boucle infinie : OK
  • Amélioration de l'expérience utilisateur : Je laisse la pause car sinon il n'est pas possible de lire le dernier message affiché, par contre, c'est une excellente idée que d'afficher au choix le résultat des actions (peut-être le log directement) a voir et à valider
  • Gestion des politiques d'exécution : Ce script n'a pas vocation à être utilise en environnement professionnel . Je vais réfléchir comment le bloquer si on est sur une machine PRO (peut-être via les policies si elles sont activées par l'entreprise). Je t'avoue que je n'ai, pour le moment pas d'idée de la faisabilité.
  • Compatibilité avec différentes versions de Windows : Je vais ajouter une validation uniquement pour WIndows 10 & Windows 11 version 23h2 et 24h2
Je regarderai cela le week-end prochain.

Bonne semaine,
Amicalement,

Pierre
Avatar du membre
MyPOV
Membre VIP
Membre VIP
Messages : 1217
Enregistré le : sam. 11 déc. 2021 14:40
A remercié : 111 fois
A été remercié : 155 fois
    Windows 10 Chrome

Re: [PowerShell] WinAutoCheck_AAZ : Un outil automatisé de vérification et de réparation système Windows

Message par MyPOV »

Au-delà du script que tu proposes, c'est l'occasion de montrer l'intérêt d'une IA telle que Deepseek. Ça ne fait pas tout, mais ça me semble une aide précieuse ; surtout si on est seul à bosser sur une idée, ça permet d'avoir l'accompagnement d'une expertise en programmation et parfois des idées judicieuses.

Le défaut majeur, mais dont on peut faire abstraction, est sa volonté de prendre tout de suite en considération l'expérience utilisateur, dont la gestion de ses erreurs. Alors qu'au moins dans les premières versions, ça ne constitue pas un objectif ; ça peut même ne jamais l'être quand c'est du code qu'on est seul à utiliser.

Je te laisse en la compagnie de Deepseek :D
"𝓛𝓮 𝓭𝓸𝓾𝓽𝓮 𝓮𝓼𝓽 𝓵𝓮 𝓬𝓸𝓶𝓶𝓮𝓷𝓬𝓮𝓶𝓮𝓷𝓽 𝓭𝓮 𝓵𝓪 𝓼𝓪𝓰𝓮𝓼𝓼𝓮" 𝖠𝗋𝗂𝗌𝗍𝗈𝗍𝖾, 𝖼𝗈𝗆𝗉𝗅𝗈𝗍𝗂𝗌𝗍𝖾 𝖦𝗋𝖾𝖼
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1131
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 104 fois
A été remercié : 111 fois
    Windows 10 Firefox

Re: [PowerShell] WinAutoCheck_AAZ.ps1 : Un outil automatisé de vérification et de réparation système Windows

Message par pboulanger »

Bonjour Mpov,

J'ai commencé à traiter les améliorations proposées :

Pour la Gestion de la boucle infinie :
En fait, le script ne contient aucune boucle explicite (while, for, foreach) ou appel récursif. Chaque étape du script est exécutée une seule fois dans un ordre linéaire.
Les commandes système comme sfc ou dism sont des appels externes et ne génèrent pas de boucles dans le script.
Même en cas d'erreur ou de non-compatibilité, le script continue ou s'arrête en fonction des conditions.
Par contre, il y a un cas improbable qui pourrait arriver "Si la vérification des droits administrateurs échouait systématiquement (ex. : un environnement où les droits ne peuvent jamais être obtenus), cela provoquerait une tentative de relance constante." La condition serait une configuration "entreprise" particulière...
=> je peux éventuellement limiter cela par une seule et unique tentative... Pour en discuter
En conclusion : Ne me semble pas utile.

Pour la Compatibilité avec différentes versions de Windows :
Je sais tester la version via le build (version égale ou supérieure à ) avec la fonction
"Check-WindowsVersion :
  • Vérifie la version et le numéro de build de Windows.
  • S'assure que le système est Windows 10 version 23H2 ou supérieur (Build ≥ 22631) ou Windows 11 version 24H2 ou supérieur (Build ≥ 25951)"
Pour la Gestion des politiques d'exécution :
J'ai trois pistes :
  • Détection de la présence d'un domaine Active Directory :
    Dans les environnements professionnels, les ordinateurs sont souvent joints à un domaine Active Directory.
    On peut vérifier si l'ordinateur est membre d'un domaine à l'aide de Get-WmiObject ou Get-CimInstance.
  • Vérification de la stratégie d'exécution globale :
    Dans les environnements gérés, la stratégie d'exécution PowerShell peut être verrouillée sur une valeur restrictive comme AllSigned ou Restricted.
  • Identification de paramètres spécifiques :
    Par exemple, les noms d'entreprise ou de domaine dans les variables d'environnement (ex. : $env:USERDOMAIN).
Je suis tenté de tester les paramètres spécifiques En particulier le nom de domaine et d’autoriser le script que pour le domaine Workgroup (celui-par défaut sur les machines grand public et qui n'est que très rarement modifié par les particuliers).
Pour le log c'est facile, idem pour les erreurs et pour l'affichage, au choix, du log au moment de la sortie.

Pour échanger sur ces pistes ...
Bonne journée
Amicalement,

Pierre
Avatar du membre
MyPOV
Membre VIP
Membre VIP
Messages : 1217
Enregistré le : sam. 11 déc. 2021 14:40
A remercié : 111 fois
A été remercié : 155 fois
    Windows 10 Chrome

Re: [PowerShell] WinAutoCheck_AAZ.ps1 : Un outil automatisé de vérification et de réparation système Windows

Message par MyPOV »

Pierre, je pense qu'il y a eu une petite méprise, ça arrive parfois dans les échanges en ligne. J'ai peut-être mal formulé mon commentaire initial.
C'est difficile d'avoir un avis, d'autant plus que c'est un poil téméraire de le tester :D Alors j'ai confié la tâche à Deepseek qui n'en dit que du bien.
Ma démarche est simplement de présenter une solution basée sur l'IA pour analyser des scripts, des fichiers .reg ou des .bat, etc, que l'on trouve sur Internet. Parfois, on n'a pas les compétences, le temps, ou même l'assurance nécessaires pour le faire, surtout quand ils manipulent des éléments sensibles de nos ordis.

J'ai donc partagé la réponse de l'IA, qui pourrait d'ailleurs intéresser ou non les développeurs sur certains aspects ; ce que tu fais dans ta précédente réponse. Par contre, je ne vais pas participer à ce développement, parce que je n'en ai pas précisément d'intérêt, voire les compétences ; bien qu'il y a très longtemps, je jouais avec Windows Script Host depuis Lisp.

Cependant, je vais suivre l'évolution de ce que tu proposes :)
"𝓛𝓮 𝓭𝓸𝓾𝓽𝓮 𝓮𝓼𝓽 𝓵𝓮 𝓬𝓸𝓶𝓶𝓮𝓷𝓬𝓮𝓶𝓮𝓷𝓽 𝓭𝓮 𝓵𝓪 𝓼𝓪𝓰𝓮𝓼𝓼𝓮" 𝖠𝗋𝗂𝗌𝗍𝗈𝗍𝖾, 𝖼𝗈𝗆𝗉𝗅𝗈𝗍𝗂𝗌𝗍𝖾 𝖦𝗋𝖾𝖼
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1131
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 104 fois
A été remercié : 111 fois
    Windows 10 Firefox

Re: [PowerShell] WinAutoCheck_AAZ.ps1 : Un outil automatisé de vérification et de réparation système Windows

Message par pboulanger »

Nouvelle version ici

viewtopic.php?p=184532#p184532
Amicalement,

Pierre
Verrouillé