Ce laboratoire vise à mettre en pratique les éléments du langage de scriptage PowerShell.
Vous aurez à réaliser un script complet permettant de réaliser la sauvegarde de répertoires en respectant les étapes présentées. Ce script est destiné à être utilisé par l'administrateur du système pour sauvegarder un ou plusieurs dossiers personnels d'utilisateur.
Livrable : Un script PowerShell nommé tp1.ps1 (pas de rapport)
Assurez-vous que le script utilise PowerShell pour son exécution.
Créez un en-tête (bloc de commentaires <#...#>) comprenant :
La partie principale du programme vérifiera tout d'abord si on a appelé le script avec -h ou --help.
a) Si aide demandée :
Get-Help).b) Sinon :
Sauvegarde avec cet utilisateur en paramètre à chaque itération de la bouclePar la suite, à la fin, le script affichera le grand total des fichiers et répertoires traités.
Si le script est appelé avec -h ou --help :
.\tp1.ps1 -h
Si le script est appelé sans paramètre :
.\tp1.ps1
Si le script est appelé avec le nom de plusieurs usagers du système :
.\tp1.ps1 user1 user2 user3
Nombre-FichiersEn fonction du paramètre reçu, elle trouvera tous les fichiers réguliers inclus et en donnera le nombre.
Paramètre : Chemin du dossier
Retour : Nombre de fichiers
Nombre-DossiersEn fonction du paramètre reçu, elle trouvera tous les dossiers inclus et en donnera le nombre.
Paramètre : Chemin du dossier
Retour : Nombre de dossiers
Nombre-Fichiers-ArchiveEn fonction du nom d'archive reçu, comptez le nombre de fichiers (uniquement) dans l'archive.
Paramètre : Chemin de l'archive ZIP
Retour : Nombre de fichiers
Utilisation : System.IO.Compression.ZipFile
Nombre-Dossiers-ArchiveEn fonction du nom d'archive reçu, comptez le nombre de dossiers (uniquement) dans l'archive.
Paramètre : Chemin de l'archive ZIP
Retour : Nombre de dossiers
Dossier-PersonnelSi la fonction est appelée avec un paramètre, la fonction retournera le chemin complet du dossier personnel de cet utilisateur (simplement ajouter C:\Users\ au début).
Paramètre : Nom d'utilisateur
Retour : Chemin complet du dossier personnel
Vérification importante :
Avant de terminer son travail, la fonction vérifiera si le dossier qu'elle s'apprête à retourner existe. Si tel n'est pas le cas, le script affichera une erreur et se terminera (exit 1).
Log-AutomatiqueCette fonction est appelée par défaut et permet de 'loguer' les manipulations de l'utilisateur ainsi que de 'loguer' les différentes fonctions appelées et les résultats de celles-ci.
Fonctionnalité : La fonction crée un fichier log.txt qui se trouve dans le répertoire C:\Temp\log.txt
Sauvegarde$env:USERNAME).Déterminez le dossier « source » au moyen de la fonction Dossier-Personnel en lui passant le paramètre reçu.
Déterminez l'archive de « destination » au moyen de la structure suivante :
$env:TEMP\utilisateur_home_date.zip
Où :
Get-Date et doit ressembler à : 2020-12-06_125959Exemple de résultat :
C:\Users\ppardo\AppData\Local\Temp\ppardo_home_2020-12-06_125959.zip
Format de la date :
Get-Date -Format "yyyy-MM-dd_HHmmss"
Effectuez l'archivage du dossier « source » dans l'archive « destination », en utilisant la compression ZIP.
Important : Gérez les erreurs potentielles avec try/catch.
Affichez l'information suivante de manière claire et pratique :
Si le nombre de fichiers à archiver est égal au nombre de fichiers archivés :
Sinon :
| Fonction | Description | Paramètre(s) | Retour |
|---|---|---|---|
Nombre-Fichiers |
Compte les fichiers dans un dossier | Chemin du dossier | Nombre entier |
Nombre-Dossiers |
Compte les dossiers dans un dossier | Chemin du dossier | Nombre entier |
Nombre-Fichiers-Archive |
Compte les fichiers dans une archive ZIP | Chemin de l'archive | Nombre entier |
Nombre-Dossiers-Archive |
Compte les dossiers dans une archive ZIP | Chemin de l'archive | Nombre entier |
Dossier-Personnel |
Retourne le chemin du dossier personnel | Nom d'utilisateur | Chemin complet |
Log-Automatique |
Enregistre les opérations dans un fichier log | Messages à logger | Aucun |
Sauvegarde |
Fonction principale de sauvegarde | Nom d'utilisateur (optionnel) | Aucun |
try/catch lors de l'archivageexit 1 en cas d'erreur critiqueC:\Temp s'il n'existe pasC:\Temp\log.txtUtiliser les classes .NET :
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($source, $destination)
Les informations doivent être affichées de manière claire et pratique. Utilisez :
Write-Host avec des couleurs pour améliorer la lisibilitéTestez chaque fonction individuellement avant de les intégrer dans le script principal.
Pendant le développement, ajoutez des Write-Host pour voir le flux d'exécution.
Assurez-vous que le script a les droits nécessaires pour :
$env:TEMPC:\Temp\Commentez votre code pour expliquer les parties complexes.
┌─────────────────────────────────────────────────────────────┐
│ DÉMARRAGE DU SCRIPT │
│ tp1.ps1 │
└────────────────────┬────────────────────────────────────────┘
│
▼
┌────────────────────────────┐
│ Vérification paramètres │
└────────────┬───────────────┘
│
┌────────────┴────────────┐
│ │
▼ ▼
[-h] ou [--help] ? Autres cas
│ │
│ │
▼ ▼
┌───────────────┐ ┌──────────────────┐
│ FIGURE 1 │ │ FIGURE 2 & 3 │
│ Aide │ │ Sauvegarde │
└───────────────┘ └──────────────────┘
Commande : .\tp1.ps1 -h ou .\tp1.ps1 --help
┌─────────────────────────────────────────┐
│ DÉTECTION -h / --help │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Affichage du message d'aide │
│ │
│ - Nom du script │
│ - Description │
│ - Syntaxe d'utilisation │
│ - Exemples │
│ - Paramètres acceptés │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ FIN DU SCRIPT │
└─────────────────────────────────────────┘
Commande : .\tp1.ps1
┌─────────────────────────────────────────┐
│ AUCUN PARAMÈTRE FOURNI │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Appel fonction Sauvegarde() │
│ sans paramètre │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Utilisation de $env:USERNAME │
│ (utilisateur qui exécute le script)│
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Fonction Dossier-Personnel() │
│ → C:\Users\[utilisateur_courant]\ │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Archivage du dossier personnel │
│ → $env:TEMP\user_home_date.zip │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Affichage des statistiques │
│ - Nombre fichiers source/archivés │
│ - Nombre dossiers source/archivés │
│ - Chemin de l'archive │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Affichage GRAND TOTAL │
└─────────────────────────────────────────┘
Commande : .\tp1.ps1 user1 user2 user3
┌────────────────────────────────────────────┐
│ PARAMÈTRES REÇUS : user1 user2 user3 │
└────────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ BOUCLE SUR CHAQUE UTILISATEUR │
└─────────────────────────────────────────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ user1 │ │ user2 │ │ user3 │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
▼ ▼ ▼
┌─────────────┐┌─────────────┐┌─────────────┐
│ Sauvegarde ││ Sauvegarde ││ Sauvegarde │
│ (user1) ││ (user2) ││ (user3) │
└──────┬──────┘└──────┬──────┘└──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────┐
│ Dossier-Personnel(user1) │
│ → C:\Users\user1\ │
└──────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Nombre-Fichiers(C:\Users\user1\) │
│ Nombre-Dossiers(C:\Users\user1\) │
└──────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Archivage ZIP │
│ → $env:TEMP\user1_home_date.zip │
└──────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Nombre-Fichiers-Archive() │
│ Nombre-Dossiers-Archive() │
└──────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Affichage statistiques user1 │
└─────────────────────────────────────────┘
│
│ (Même processus pour user2 et user3)
│
▼
┌─────────────────────────────────────────┐
│ CUMUL DES TOTAUX │
│ - Total fichiers traités │
│ - Total dossiers traités │
└──────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Affichage GRAND TOTAL │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Fonction Sauvegarde([string]$user) │
└────────────────┬────────────────────────┘
│
▼
┌────────────────────┐
│ Paramètre vide ? │
└────┬──────────┬────┘
│ │
OUI │ │ NON
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│$env:USERNAME│ │ Utiliser │
│ │ │ paramètre │
└────────┬─────┘ └──────┬───────┘
│ │
└────────┬───────┘
│
▼
┌───────────────────────────────────┐
│ Appel Dossier-Personnel($user) │
│ → Vérification existence dossier │
└────────────┬──────────────────────┘
│
┌────┴────┐
│ │
Existe N'existe pas
│ │
│ ▼
│ ┌─────────────┐
│ │ Erreur │
│ │ Exit 1 │
│ └─────────────┘
│
▼
┌──────────────────────────────────────┐
│ Compter fichiers/dossiers SOURCE │
│ - Nombre-Fichiers() │
│ - Nombre-Dossiers() │
└────────────┬─────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Création archive ZIP │
│ Try/Catch pour gérer erreurs │
│ → $env:TEMP\user_home_date.zip │
└────────────┬──────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ Compter fichiers/dossiers ARCHIVE │
│ - Nombre-Fichiers-Archive() │
│ - Nombre-Dossiers-Archive() │
└────────────┬─────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Comparaison Source vs Archive │
└────┬──────────────────────────┬───┘
│ │
Égal │ │ Différent
│ │
▼ ▼
┌──────────┐ ┌───────────┐
│ SUCCÈS │ │ ERREUR │
│ Afficher│ │ Afficher │
│ chemin │ │ message │
└──────────┘ └───────────┘
┌────────────────────────────────────────────────┐
│ FONCTIONS AUXILIAIRES │
└────────────────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Nombre-Fichiers($chemin) │
│ → Compte fichiers dans dossier │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Nombre-Dossiers($chemin) │
│ → Compte dossiers dans dossier │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Nombre-Fichiers-Archive($archive)│
│ → Compte fichiers dans ZIP │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Nombre-Dossiers-Archive($archive)│
│ → Compte dossiers dans ZIP │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Dossier-Personnel($user) │
│ → Retourne C:\Users\$user\ │
│ → Vérifie existence │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Log-Automatique() │
│ → Écrit dans C:\Temp\log.txt │
└─────────────────────────────────────┘
-h ou --helpNombre-Fichiers est implémentéeNombre-Dossiers est implémentéeNombre-Fichiers-Archive est implémentéeNombre-Dossiers-Archive est implémentéeDossier-Personnel est implémentée et vérifie l'existenceLog-Automatique est implémentéeSauvegarde est complèteyyyy-MM-dd_HHmmss)try/catchtp1.ps1