CER : Scripting
(PowerShell)
02/10/2024
OLINGA JEAN DONALD
Table de matière
I. Analyse du contexte.
II. Problématique.
III. Contrainte.
IV. Plan d’action.
V. Réalisation du plan d’action.
VI. Validation des hypothèses.
VII. Conclusion et Retour sur les objectifs.
VIII. Bilan critique du travaille effectue.
IX. Références et Méthodes utilisées.
X. Références bibliographiques fournies par le prosit.
XI. Références bibliographique supplémentaire.
PAGE 1
I. Analyse du contexte.
Suite à la création de notre cybercafé, nous devons créer un script permettant
de configurer nos machines windows 7 ultimate.
II. Problématique.
Comment concevoir un script exécutable sur toutes les machines ?
III. Contraintes.
Utilisation de l’UAC
Affichage du message BOX
Le fichier.exe doit être en lecture seule
IV. Plan d’action.
Définition des mots clés
Etudier les paramètres à implémenter
Etudier et comparer les outils de scripting
Etude du scripting
implémenter les paramètres
Rédiger et exécuter le script
PAGE 2
V. Réalisation du plan d’action.
1. DEFINITION DES MOTS CLES :
MS-DOS : Ancien système d'exploitation en ligne de commande, limité par
rapport aux outils modernes.
PowerShell : Environnement moderne de script basé sur le Framework .NET,
largement utilisé pour automatiser l’administration système.
Scripting : Activité d'écriture de scripts dans des langages comme PowerShell,
Python, ou Bash pour automatiser des tâches.
Framework .NET et .NET Core : Ce sont des environnements de développement
riches qui permettent de créer des applications modernes, avec le .NET Core offrant
des capacités multiplateformes, tandis que le Framework .NET est principalement lié
à Windows.
2. ETUDE DES NOTIONS :
Technologies de Scripting sous Microsoft Windows
a) Batch (Commandes MS-DOS)
Description : L’une des plus anciennes technologies de scripting sous Microsoft.
Les fichiers batch (.bat) permettent d'automatiser des tâches à l’aide de
commandes MS-DOS.
Commandes communes : echo, cd, dir, copy, del.
Utilisation : Très simple, mais limité en termes de fonctionnalités avancées
comme la gestion des objets ou des structures de contrôle sophistiquées.
b) VBScript (Visual Basic Scripting Edition)
Description : Un langage de script créé par Microsoft basé sur Visual Basic.
VBScript permet de manipuler des objets et d’automatiser des tâches complexes.
Extension des fichiers : .vbs
Utilisation : Souvent utilisé dans les scripts d'administration système ou pour
interagir avec les composants COM (Component Object Model).
Limites : Aujourd’hui, VBScript est largement remplacé par PowerShell, car il
n’est pas aussi puissant pour l’administration système moderne.
c) JScript
PAGE 3
Description : Une implémentation de Microsoft du langage ECMAScript
(similaire à JavaScript), principalement utilisé pour les scripts côté client dans
Internet Explorer.
Extension des fichiers : .js
Utilisation : Surtout utilisé pour le scripting côté client dans les pages Web
(avec ActiveX), mais moins fréquent dans l’administration système par rapport à
VBScript ou PowerShell.
d) Windows Script Host (WSH)
Description : Un moteur qui permet l'exécution de scripts VBScript ou JScript
sous Windows en dehors du navigateur. Il fournit un environnement pour
l'exécution de scripts directement dans Windows.
Utilisation : Automatisation des tâches à travers des scripts exécutés sur le
bureau ou à partir de la ligne de commande.
e) PowerShell
Description : Introduit avec Windows en 2006, PowerShell est une technologie
moderne de scripting qui offre une interface en ligne de commande avancée. Elle
combine une gestion des objets puissante avec la possibilité d'accéder au
système et aux composants via le Framework .NET.
Extension des fichiers : .ps1
Utilisation : C’est l'outil principal pour l’administration système sous Windows
(gestion des utilisateurs, des fichiers, des processus, des services, etc.). Il est
également utilisé dans DevOps, l'automatisation des infrastructures et le cloud.
Points forts : Support natif des objets .NET, syntaxe moderne, extensible avec
des modules et interopérabilité avec les API.
Lien entre PowerShell, la Programmation Orientée Objet (POO)
et le Framework .NET
a) PowerShell et la POO
Support des objets : PowerShell est un langage basé sur des objets, et tout
élément manipulé dans PowerShell est un objet. Les objets sont des instances de
classes, ce qui est le fondement de la Programmation Orientée Objet (POO).
Manipulation d'objets : Lorsque vous exécutez une commande dans
PowerShell, celle-ci retourne des objets et non pas simplement du texte. Par
exemple, si vous exécutez Get-Process, chaque processus renvoyé est un
objet avec des propriétés comme Name, Id, CPU, etc.
POO en PowerShell : Vous pouvez créer des classes, définir des propriétés et
des méthodes, et utiliser des concepts tels que l’héritage, l’encapsulation, et le
polymorphisme directement dans PowerShell à partir de la version 5.0.
Exemple d’utilisation de la POO en PowerShell :
powershell
Copier le code
class Animal {
PAGE 4
[string]$Name
[int]$Age
Animal([string]$name, [int]$age) {
$this.Name = $name
$this.Age = $age
}
[void] Speak() {
Write-Host "$($this.Name) is making a noise."
}
}
$cat = [Animal]::new("Whiskers", 2)
$cat.Speak() # Affiche : Whiskers is making a noise.
b) PowerShell et le Framework .NET
Base du Framework .NET : PowerShell repose sur le Framework .NET, ce qui
lui permet de tirer parti de toutes les bibliothèques .NET pour manipuler des
objets, interagir avec des fichiers, des systèmes de fichiers, des processus, des
services, des API, etc.
Interopérabilité avec .NET : PowerShell permet d’accéder directement aux
classes et méthodes du Framework .NET. Par exemple, vous pouvez créer des
objets .NET dans PowerShell, appeler leurs méthodes et accéder à leurs
propriétés.
Exemple d’utilisation des objets .NET dans PowerShell :
powershell
Copier le code
# Utilisation d'une classe .NET pour obtenir la date actuelle
$dateNow = [System.DateTime]::Now
Write-Host "La date et l'heure actuelles : $dateNow"
# Création d'un objet de la classe System.IO.FileInfo pour
interagir avec un fichier
$file = New-Object System.IO.FileInfo "C:\temp\test.txt"
Write-Host "Taille du fichier : $($file.Length) octets"
c) PowerShell et .NET Core
Évolution vers .NET Core : Avec PowerShell Core (à partir de PowerShell 6.0),
PowerShell est désormais multi-plateforme (Windows, Linux, MacOS) et repose
sur .NET Core, qui est une version allégée et cross-plateforme du
Framework .NET.
Interopérabilité accrue : PowerShell Core permet une interopérabilité encore
plus large avec des environnements hétérogènes, notamment en gestionnant des
infrastructures cloud (Azure, AWS, etc.).
PAGE 5
Création d’un script PowerShell pour l’administration du
système de fichiers et de la base de registre
PowerShell est un outil puissant pour l’administration du système de fichiers et de la
base de registre sur Windows. Voici comment créer un script qui accomplit ces
tâches.
a) Administration du système de fichiers
Créer des répertoires, copier des fichiers, et gérer les permissions de fichiers.
Exemple de script pour administrer le système de fichiers :
powershell
Copier le code
# Créer un répertoire
$path = "C:\Backup"
if (-not (Test-Path $path)) {
New-Item -Path $path -ItemType Directory
}
# Copier un fichier vers le répertoire de sauvegarde
Copy-Item -Path "C:\ImportantFiles\file1.txt" -Destination
"$path\file1.txt"
# Lister les fichiers dans le répertoire de sauvegarde
Get-ChildItem -Path $path
# Changer les permissions sur un fichier
$acl = Get-Acl "$path\file1.txt"
$rule = New-Object
System.Security.AccessControl.FileSystemAccessRule("Everyone",
"FullControl", "Allow")
$acl.AddAccessRule($rule)
Set-Acl "$path\file1.txt" -AclObject $acl
b) Administration de la base de registre
Manipuler les clés et les valeurs dans la base de registre Windows.
Exemple de script pour manipuler la base de registre :
powershell
Copier le code
# Créer une clé dans la base de registre
New-Item -Path "HKCU:\Software\MyApp" -Force
# Ajouter une valeur à la clé
Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "Version"
-Value "1.0"
PAGE 6
# Lire une valeur dans la base de registre
$version = Get-ItemProperty -Path "HKCU:\Software\MyApp" -Name
"Version"
Write-Host "Version actuelle : $($version.Version)"
# Supprimer une clé dans la base de registre
Remove-Item -Path "HKCU:\Software\MyApp" -Recurse -Force
Création et utilisation d’objets avec PowerShell
PowerShell prend en charge la Programmation Orientée Objet (POO). Vous pouvez
créer vos propres classes et objets, manipuler les objets existants, et interagir avec le
système.
a) Créer une classe et des objets en PowerShell
Vous pouvez définir des classes en PowerShell pour créer des objets avec des
méthodes et des propriétés.
Exemple d’une classe en PowerShell :
powershell
Copier le code
class Person {
[string]$Name
[int]$Age
Person([string]$name, [int]$age) {
$this.Name = $name
$this.Age = $age
}
[void] Greet() {
Write-Host "Bonjour, je m'appelle $($this.Name) et
j'ai $($this.Age) ans."
}
}
# Créer un objet de la classe Person
$person1 = [Person]::new("Alice", 25)
$person1.Greet()
$person2 = [Person]::new("Bob", 30)
$person2.Greet()
b) Utilisation d’objets système et .NET dans PowerShell
PowerShell permet également de manipuler des objets issus de .NET ou du système.
Exemple d’utilisation d’un objet .NET pour obtenir la date actuelle :
PAGE 7
powershell
Copier le code
# Obtenir l'heure actuelle avec un objet .NET
$dateNow = [System.DateTime]::Now
Write-Host "Date actuelle : $dateNow"
# Manipuler des fichiers avec des objets .NET
$fileInfo = New-Object System.IO.FileInfo "C:\ImportantFiles\
file1.txt"
Write-Host "Taille du fichier : $($fileInfo.Length) octets"
3. Définition et rôle de CMD.EXE, COMMAND.COM, et du Framework .NET
a) CMD.EXE
Description : CMD.EXE est l’interpréteur de commandes de Windows qui émule
le comportement de MS-DOS. Il fournit une interface pour exécuter des
commandes, des scripts batch et gérer des processus via la ligne de commande.
Rôle : CMD.EXE permet d'interagir avec le système d’exploitation en exécutant
des commandes textuelles pour effectuer des tâches comme la gestion de
fichiers, la navigation dans les répertoires, l'exécution de scripts .bat, etc.
Exemple de commande : dir pour lister les fichiers dans un répertoire, copy
pour copier des fichiers.
b) COMMAND.COM
Description : COMMAND.COM est l'interpréteur de commandes original de MS-
DOS et des premières versions de Windows (jusqu'à Windows 95/98/ME). C'est
l'ancêtre de CMD.EXE.
Rôle : Comme CMD.EXE, COMMAND.COM permet d’exécuter des commandes
système, mais il est beaucoup plus limité en termes de fonctionnalités. Il a été
remplacé par CMD.EXE dans les versions modernes de Windows.
Exemple de commande : dir, copy (commandes similaires à CMD.EXE).
c) Framework .NET
Description : Le Framework .NET est une plateforme de développement créée
par Microsoft, permettant de créer des applications sur Windows avec des
langages comme C#, VB.NET et F#. Il fournit une vaste bibliothèque de classes,
ainsi qu'un environnement d'exécution appelé le CLR (Common Language
Runtime).
Rôle : Le Framework .NET joue un rôle essentiel dans l’architecture de
Windows, offrant des bibliothèques et des outils pour développer des
applications et manipuler des ressources système. PowerShell est basé sur ce
framework, ce qui lui permet de bénéficier des fonctionnalités avancées offertes
par les classes .NET.
Exemple d’utilisation en PowerShell : Comme vu précédemment, PowerShell
permet d'interagir directement avec les classes et objets .NET :
powershell
Copier le code
PAGE 8
$currentDate = [System.DateTime]::Now
Write-Host "La date actuelle est : $currentDate"
Lien entre PowerShell et le Framework .NET
PowerShell est directement basé sur le Framework .NET, ce qui lui confère une
immense flexibilité et puissance. Chaque commande ou fonction dans PowerShell
manipule des objets .NET, ce qui permet de bénéficier de la robustesse et de la
modularité du Framework .NET. Par exemple, lorsque vous utilisez une commande
comme Get-Process, elle renvoie un objet de type
System.Diagnostics.Process, un type défini dans le Framework .NET.
La combinaison de PowerShell et du Framework .NET permet de gérer efficacement
les systèmes, d'accéder aux API .NET, et d'automatiser des tâches complexes tout en
s'appuyant sur les paradigmes de la Programmation Orientée Objet.
Commandes de base :
1. Get-Help : Fournit de l'aide sur les commandes PowerShell.
o Exemple : Get-Help Get-Process
2. Get-Command : Affiche une liste des commandes disponibles dans
PowerShell.
o Exemple : Get-Command
3. Get-Process : Affiche une liste des processus en cours d'exécution.
o Exemple : Get-Process
4. Get-Service : Liste tous les services Windows en cours d'exécution sur le
système.
o Exemple : Get-Service
5. Start-Service : Démarre un service.
o Exemple : Start-Service -Name 'W32Time'
6. Stop-Service : Arrête un service.
o Exemple : Stop-Service -Name 'W32Time'
7. Get-ChildItem (ou ls/dir) : Liste les fichiers et sous-répertoires d’un
dossier.
o Exemple : Get-ChildItem C:\
8. Copy-Item : Copie un fichier ou un dossier vers un autre emplacement.
o Exemple : Copy-Item "C:\source.txt" -Destination "C:\
backup"
PAGE 9
9. Move-Item : Déplace un fichier ou un dossier vers un autre emplacement.
o Exemple : Move-Item "C:\source.txt" "C:\new_location"
10. Remove-Item : Supprime un fichier ou un dossier.
o Exemple : Remove-Item "C:\source.txt"
Commandes de gestion du système :
11. Get-EventLog : Affiche les événements du journal d'événements Windows.
o Exemple : Get-EventLog -LogName Application
12. Write-EventLog : Écrit un événement dans le journal d'événements.
o Exemple : Write-EventLog -LogName Application -Source
"MyApp" -EntryType Information -EventId 1001 -
Message "Test Event"
13. Get-Date : Affiche la date et l’heure actuelles.
o Exemple : Get-Date
14. Get-Content : Lit le contenu d'un fichier texte.
o Exemple : Get-Content "C:\file.txt"
15. Set-Content : Écrit du contenu dans un fichier.
o Exemple : Set-Content "C:\file.txt" -Value "Hello,
World!"
16. Add-Content : Ajoute du contenu à un fichier existant.
o Exemple : Add-Content "C:\file.txt" -Value "Another
line"
17. Test-Path : Vérifie si un fichier ou un dossier existe.
o Exemple : Test-Path "C:\file.txt"
18. New-Item : Crée un nouveau fichier ou dossier.
o Exemple : New-Item -Path "C:\NewFolder" -ItemType
Directory
19. Rename-Item : Renomme un fichier ou un dossier.
o Exemple : Rename-Item "C:\OldName.txt" -NewName
"NewName.txt"
Commandes de gestion des utilisateurs et systèmes :
20. Get-ADUser : Récupère des informations sur les utilisateurs Active
Directory.
o Exemple : Get-ADUser -Identity "jdoe"
21. New-ADUser : Crée un nouvel utilisateur Active Directory.
o Exemple : New-ADUser -Name "John Doe"
PAGE 10
22. Set-ExecutionPolicy : Change la politique d'exécution des scripts
PowerShell (par exemple, RemoteSigned, Restricted).
o Exemple : Set-ExecutionPolicy RemoteSigned
23. Invoke-Command : Exécute une commande sur un ordinateur distant.
o Exemple : Invoke-Command -ComputerName "Server1" -
ScriptBlock { Get-Service }
24. Restart-Computer : Redémarre l'ordinateur.
o Exemple : Restart-Computer
Commandes de manipulation des objets :
25. Select-Object : Sélectionne des propriétés spécifiques des objets.
o Exemple : Get-Process | Select-Object Name, CPU
26. Sort-Object : Trie des objets selon une propriété spécifiée.
o Exemple : Get-Process | Sort-Object CPU -Descending
27. Where-Object : Filtre les objets en fonction d'une condition.
o Exemple : Get-Process | Where-Object { $_.CPU -gt 50 }
28. ForEach-Object : Exécute une action sur chaque objet d'une collection.
o Exemple : Get-Process | ForEach-Object { $_.Name }
Commandes de réseau :
29. Test-Connection : Teste la connectivité réseau vers une adresse IP ou un
nom d'hôte (similaire à ping).
o Exemple : Test-Connection google.com
30. Invoke-WebRequest : Télécharge des données d’une URL.
o Exemple : Invoke-WebRequest -Uri "http://example.com"
-OutFile "C:\example.html"
VI. Validation des hypothèses.
Devons-nous mettre toutes les machines sur un même système d’exploitation
?
Doit-on avoir une machine administrative pour exécuter le script ?
Doit-on mettre en place un contrôleur de domaine ?
PAGE 11
VII. Conclusion et retour sur les objectifs.
En conclusion, ce prosit m’a permis de maitriser la notion de Scripting
avec PowerShell.
VIII. Bilan critique du travaille effectue.
J’ai beaucoup appris durant ce prosit.
IX. Références bibliographiques fournies par le prosit :
SHELL SCRIPTING
https://fsl.fmrib.ox.ac.uk/fslcourse/lectures/scripting/all.htm
10 keys to command shell scripting
https://www.itprotoday.com/programming-languages/10-keys-
command-shell-scripting
Windows PowerShell – Contrer le code malveillant
http://technet.microsoft.com/fr-fr/magazine/
2008.01.powershell.aspx
PowerShell: No More Dangerous Than Anything Else
https://www.itprotoday.com/powershell/powershell -no-more-
dangerous-anything-else
Désactiver les confirmations UAC dans Windows 7 ou Windows
8 http://syskb.com/desactiver-les-confirmations-uac-dans-windows-
7/
PowerShell Message Box Function
PAGE 12
- https://ss64.com/ps/messagebox.html
- How To Display GUI Message Boxes in PowerShell -- Microsoft
Certified Professional Magazine Online (mcpmag.com)
Using the Get-ItemProperty Cmdlet
http://technet.microsoft.com/en-us/library/ee176852.aspx
Windows Powershell – Guide de référence pour l’administration
système
http://books.google.fr/books?
id=iKJgx_aIUysC&printsec=frontcover&hl=fr#v=onepage &q&f=fal
se
Windows Powershell Cookbook http://books.google.fr/books?
id=78w1953mptUC&printsec=frontcover&hl=fr#v=onepag e&q&f
=false
Powershell – Add-Type cmdlet
http://power-shell.blogspot.fr/2011/10/add-type.html
Comment exécuter un script Powershell ?
http://syskb.com/comment-executer-un-script-en-powershell/
Signature numérique de scripts Powershell
- http://laurent-
dardenne.developpez.com/articles/Windows/PowerShell/
SignatureNumerique/
PAGE 13
- How to Sign a PowerShell Script (And Run It)
(adamtheautomator.com)
- about Signing - PowerShell | Microsoft Docs
X. Références bibliographiques supplémentaires :
R.A.S
PAGE 14