L'OS Windows
- Présentation
Vous utilisez tous les jours Windows au lycée et probablement chez vous, cette activité va vous permettre de découvrir certains aspects de cet OS.
Vous savez sans doute que Windows est un logiciel propriétaire ce qui veut dire que son code n'est pas open source, le logiciel n'est pas libre ( vous n'avez pas la liberté d'exécuter le programme sans accepter le contrat de licence cluf qui ne vous accorde pas la liberté de copier le programme, ni de le modifier, ni de le distribuer).
Pour pouvoir analyser Windows, il faut avoir des droits d'administrateur machine, vous avez pu remarquer que ce n'est pas votre cas sur les ordinateurs du lycée. Pour contourner le problème, vous lancerez un système Windows SandBox. La SandBox ou bac à sable est une machine virtuelle qui permet de tester en toute sécurité des logiciels. Windows SandBox est disponible comme fonctionnalité de Windows 10 pro (à partir de la version 2004 de l'OS).
- Concepts de processus et thread
Un programme informatique ( appelé Application par Windows) se présente sous la forme de plusieurs fichiers binaires. Binaires veut dire que les fichiers contiennent des nombres binaires qui, dans le cas d'un programme, correspondent aux instructions à communiquer au microprocesseur pour faire fonctionner le programme. Un des fichiers binaires porte l'extension .exe, il contient les instructions de démarrage du programme, c'est le contenu de ce fichier qui est chargé en mémoire lorsque vous cliquez sur l’icône du programme. Ci-dessous le fichier "notepad.exe" qui contient le code de démarrage du programme notepad.
Au moment où vous cliquez sur l’icône, vous signalez à Windows de lancer le programme. Windows crée alors un processus correspondant au programme. Un processus est un ensemble qui comprend:
- Un espace mémoire pour accueillir les instructions du programme.
- Un contexte de sécurité qui identifie l'utilisateur du programme ce qui donne des droits au processus. Un programme lancé par un utilisateur standard ne pourra pas accéder aux données non autorisées pour ce type d'utilisateur.
- Un processus possède un identifiant de processus appelé "process ID" (PID) qui est un nombre entier qui identifie le processus.
- Le processus contient également au moins un fil d'exécution ( un thread en Anglais ), ce sont les instructions du programme à exécuter (son code), un thread est un bloc de code (instructions du programme à exécuter) chargé en mémoire. Comprenez bien que le thread est le code du programme chargé en mémoire, le processus est un conteneur qui comprend le (ou les) thread(s), un espace mémoire réservé, un contexte de sécurité, etc.
Chaque thread possède:
- Un identifiant appelé "thread ID" (TID) qui est différent de celui de l'ID du processus (PID) auquel il appartient.
- Un espace de stockage à l'intérieur de l'espace mémoire du processus pour les données du thread.
- Concepts de bibliothèque ou librairie dynamique (dll)
La plupart des programmes utilisent des instructions similaires pour accéder au système de fichier, créer une fenêtre, etc.. Pour ne pas alourdir le code des applications, Microsoft propose des bibliothèques de fonctions prêtes à l'emploi pour les tâches communes à tous les programmes. Ces fonctions sont disponibles à travers des bibliothèques dynamiques ( un fichier d'extension .dll). On parle de bibliothèques dynamiques parce que le code qu'elles contiennent n'est chargée en mémoire qu'au moment nécessaire.
Information: dll vient de l'Anglais dynamic link library: librairie à lien dynamique.
Exercice 2.1
- Lancer Windows SandBox.
- Faites un copier-coller du dossier sysinternals (présent dans le dossier Dossup/NSI/Ressources ) sur le bureau de Windows SandBox
- Lancez le logiciel "proceexp" présent dans le dossier sysinternals.
- Lancez ensuite le logiciel "Paint.exe" présent dans le dossier Windows accessoires de Windows SandBox.
- Précisez le PID du processus associé à Paint.exe et combien de threads sont associés à ce processus. Citez une des bibliothèques dynamiques utilisées par Paint. - Après avoir comparé avec les résultats de votre voisin, vous préciserez si le processus de Paint.exe a toujours le même PID ou bien si celui-ci change d'une session de travail à une autre et d'un ordinateur à une autre.
- Parenté entre processus
Lorsque vous lancez un programme, ce dernier est la plupart du temps enfant d'explorer.exe qui est le programme chargé de gérer l'interface graphique de Windows (lien entre vous et Windows). Pour voir qui est le parent d'un processus, avec process explorer vous faites un clic droit sur le processus, vous choisissez l'entrée Properties du menu contextuel qui s'affiche, puis l'onglet image. Ci-dessous pour "Paint":
- Extinction d'un processus
Vous avez peut être déjà dû "tuer" un programme qui ne répond plus avec le gestionnaire de tâches, parfois le gestionnaire de tâches refuse d'éteindre le processus parce que le thread responsable du problème est bloqué. Un logiciel comme process explorer peut donner des meilleurs résultats; sinon, la ligne de commande est aussi plus radicale. Voyons comment procéder.
- Avec processExp: vous faîtes un clic droit sur le processus ( ci dessous mspaint.exe) puis vous choisissez "Kill Process". L'entrée "Kill Process tree" va également tuer tous les enfants si le processus a lancé d'autres processus.
- En ligne de commande:
il faut rechercher et lancer l'invite de commande cmd:
- Saisir ensuite la commande tasklist pour afficher les processus avec leur PID:
- Relever le PID du processus à tuer, par exemple ici mspaint.exe a le PID 5584
- Saisir la commande taskkill /PID .... ( les pointillés sont remplacés par le numéro du PID, 5584 dans l'exemple ci-dessous) :
Exercice 2.2
Lancez l'application Notepad.exe, puis éteignez le processus en ligne de commande, précisez toutes les commandes saisies sur votre compte rendu ( ou faites une capture d'écran que vous collerez dans votre compte rendu).
- Les services
Les services sont des programmes particuliers démarrés par le gestionnaire de contrôle des services Windows, ils s'exécutent en tâche de fond sans intervention de l'utilisateur du PC; le lancement des services intervient durant la phase de démarrage de Windows. Le rôle d'un service, comme son nom l'indique, est d'offrir un service soit à l'OS soit aux programmes qui le nécessitent.
Un service peut être activé ou désactivé, autorisé à être démarré automatiquement ou manuellement, l'interface de gestion des services (services.msc) permet à un administrateur d'effectuer ces réglages ( ATTENTION: ne touchez pas aux réglages des services si vous ne savez pas ce que vous faîtes, en l'absence de certains services, certains programmes peuvent ne plus fonctionner correctement ).
Beaucoup de fonctionnalités client-serveur fonctionnent grâce à des services; par exemple l'antivirus d'un PC utilise un service pour contacter un serveur de mise à jour et mettre à jour sa base anti-virale.
Ci-dessous, la liste des services de votre Windows 10 affichée par services.msc
Process explorer vous liste les services utilisés par un processus, par exemple, le processus svchost.exe charge en mémoire les bibliothèques dll qui ont été développées sous forme de services, un clic droit sur un processus svchost.exe vous permet de voir les services concernés:
Exercice 2.3
Donnez la liste des services utilisés par le processus lsass.exe
Vous pouvez ensuite passer au chapitre suivant "découverte de Powershell".
Les deux chapitre qui suivent ( Mode Noyau et Mode utilisateur; les fichiers systèmes de Windows) sont une description détaillée des fichiers système de Windows pour les personnes intéressées, il n'y a pas de questions. Si vous n'êtes pas intéressé(e)s, vous pouvez passer au chapitre sur Powershell.
- Mode Noyau ( kernel mode) et Mode utilisateur ( user mode)
Pour rendre son système robuste, Windows utilise une des caractéristiques des microprocesseurs appelé mode protégé. Quand le microprocesseur est placé dans le mode protégé, une partie des registres (mémoires internes du microprocesseur) devient interdite aux threads des processus, de même certaines instructions de contrôle du microprocesseur deviennent inopérantes.
Microsoft utilise cette spécificité pour placer l'os dans deux modes distincts de fonctionnement:
- Le mode noyau dans lequel tous les registres et instructions du microprocesseur sont accessibles. Seul des processus système peuvent être dans ce mode.
- Le mode utilisateur dans lequel le processeur est en mode protégé. Tout ce que fait un utilisateur et tous les programmes qu'il lance sont en mode utilisateur.
Information: en mode utilisateur, le plan d'adressage de l'espace mémoire communiqué par Windows à un processus est virtuel, chaque processus pense disposer de 8To de mémoire vive sur un système Windows 64 bits. Au moment d'une demande d'un accès à la mémoire, Windows commute en mode noyau et l'adresse virtuelle est translatée en adresse physique ( adresse réelle) que ne connaîtra jamais le thread. Il est impossible pour un thread de savoir l'adresse réelle de ses données en mémoire ni l'adresse en mémoire des autres threads en cours d'exécution..
- Les fichiers "système" de Windows
Windows est constitué d'un ensemble de fichiers en communications, on les appelle les fichiers "système". Les programmes que vous lancez sont en communication avec ces fichiers systèmes. Ci-dessous vous trouverez la liste et le rôle de quelques fichiers système, cette description s'adresse à des passionnés tenaces.
Concept préalable: un fichier executable ( extensions .exe, .com, etc...) contient du code machine directement compréhensible par le microprocesseur.
Nom |
Rôle |
Type et mode |
Ntoskrnl.exe ( New technology system Kernel) |
Ce processus contient l'exécutif et le noyau de l'OS. Le code de l'exécutif est la partie de Windows qui permet de gérer la mémoire, la sécurité, les opérations d'entrées et sorties de la machine, l'accès réseau, la communication entre les processus, etc.. Le code du noyau de l'OS gère entre autres le temps d'exécution des threads et la synchronisation entre les processeurs. |
Fichier exécutable en mode noyau ( un utilisateur ne peut pas lancer ce programme, il est lancé par le chargeur de démarrage de Windows). |
Win32k.sys |
Ce fichier driver est utilisé par l'exécutif et le noyau pour la gestion des sorties vers l'écran, la lecture des entrées clavier et souris, la transmission des messages aux applications. Il contient les fonctions pour dessiner et écrire sur l'écran. |
Fichier driver en mode noyau. |
Hal.dll |
Les fonctions de cette bibliothèque assurent l'interface entre les divers pilotes de périphériques installés sur la machine et le noyau de l'OS. |
Bibliothèque dynamique en mode noyau ( les processus utilisateur ne peuvent pas accéder à ses fonctions) |
Ntdll.dll |
Les fonctions de cette bibliothèque permettent l'interfaçage entre le code des programmes lancés sur la machine et le code de l'exécutif présent dans Ntoskrnl.exe |
Bibliothèque dynamique en mode utilisateur ( les processus utilisateur ne peuvent pas accéder directement aux fonctions décrites dans Ntdll, ces processus ont accès aux fonctions d'autres bibliothèques appelées les API qui sont en lien avec Ntdll.dll) |
Les API: Kernel32.dll, advapi.dll, user32.dll ..... |
Les fonctions de ces bibliothèques sont utilisées par les applications pour demander d'accéder à la mémoire (kernel32), au registre ( advapi), créer des fenêtres (usr32). Ces bibliothèques sont appelées sous-systèmes dll ( subsystems Dlls en Anglais) et les fonctions qu'elles contiennent sont appelées des API ( Application Programming Interface) parce qu'elles sont utilisées par les programmeurs pour s'interfacer avec Windows. |
Bibliothèques ( librairies) dynamiques en mode utilisateur ( les programmes utilisent les fonctions de ces bibliothèques pour demander de générer les fenêtres, demander à accéder à la mémoire, au système de fichier, etc.. ), ces bibliothèques sont en lien avec Ntdll.dll qui communique avec le code de l'exécutif et le noyau. |
smss.exe ( session manager subsystem) |
Ce processus contient le code de la gestion des sessions ( Session manager), ce programme système charge les dll de l'API, lance Csrss.exe, Wininit.exe et Winlogon.exe expliqués ci-dessous. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer); c'est le premier processus créé en mode utilisateur au démarrage de Windows, il est chargé par le dernier processus du mode noyau créé. |
Csrss.exe ( Client server run time subsystem) |
Ce processus est appelé Sous-système d'environnement Windows. il contient le code qui permet aux applications de s'interfacer avec l'exécutif de Windows pour tout ce qui ne se fait pas à partir des API. Pour chaque session, un processus de Csrss est lancé, ce processus va charger trois bibliothèques dynamiques ( basesrv.dll, Winsrv.dll et Csrsv.dll) qui contiennent les fonctions pour: - Créer et éteindre les processus et threads du mode utilisateur. - Assurer une partie de la compatibilité avec les systèmes 16 et 32 bits. - Plus d'autres fonctions diverses comme la prise en compte des langues. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Wininit.exe ( Windows initialization process) |
Ce processus permet l'initialisation d'une session utilisateur Windows. Il lance Services.exe, Lsass.exe et Lsm.exe. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Services.exe |
Processus chargé du contrôle des services Windows. Windows s'appuie sur de nombreux services pour le pare feu , pour les connexions réseau, pour le son, etc. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
svchost.exe (service host) |
svchost.exe permet de créer des processus pour les services développés comme bibliothèques dynamiques (Il n'est pas possible d'exécuter directement le code bibliothèques dynamiques (d'un fichier dll), les dll doivent être chargées dans un processus, d'où l'utilisation du processus svchost.exe pour lancer le code des services contenus dans les dll). Pour éviter que si un service plante cela entraîne l'arrêt des autres services, les services sont regroupés par catégories dans des processus distincts svchost.exe. Un processus svchost.exe peut ainsi regrouper les services qui gèrent le pare feu, un autre peut regrouper tous les services liés à l'interface utilisateur, et ainsi de suite. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Lsm.exe ( Local system manager) |
Processus responsable de la gestion des sessions terminal serveur. La technologie terminal serveur permet d'avoir plusieurs sessions actives sur une même machine et de se connecter à des machines distantes. Ce processus communique avec Smss.exe qui est le processus responsable des sessions sur la machine. Lsm.exe communique aussi avec Winlogon.exe ( pour changer de session). |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Winlogon.exe |
Processus chargé de gérer les demandes d'ouverture et de fermeture de session. Winlogon.exe lance LogonUi.exe qui est le programme qui affiche la boite de dialogue d'authentification que vous connaissez. Cette technique de processus séparé entre Winlogon.exe et LogonUi sécurise le processus d'ouverture de session. LogonUi transmet les données saisies à Winlogon qui les transmets à Lsass.exe ( le gestionnaire de sécurité locale ). Lssas.exe demande la vérification des données à l'exécutif qui consulte sa base de donnée utilisateurs, appelée base SAM pour une authentification locale, sinon l'exécutif contacte un serveur si l'authentification est réseau. Quand l'authentification est validée Winlogon lance Userinit.exe qui initialise l'environnement utilisateur en demandant l'exécution des scripts d'ouverture de session et l'application des politiques de groupes mises en place par l'administrateur. Userinit.exe lance ensuite le programme explorer.exe qui affiche le bureau. Les processus Userinit.exe et LogonUi se terminent ensuite. Winlogon reste actif en attente d'un ctrl+Alt+supp qui permettrait de verrouiller la session, la fermer, etc.. (la raison de cette séquence clavier est qu'elle ne peut pas être écoutée par un programme qui tenterait d'intercepter les logins saisis, en d'autres termes aucun programme n'est autorisé à recevoir un événement qui indique que cette suite de caractères vient d'être effectuée). |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Lsass.exe ( Local Security Autority Subsystem) |
Ce processus est responsable de la sécurité locale (comme quels utilisateurs locaux sont autorisés à se loguer sur la machine ou quels sont les droits accordés aux utilisateurs et groupes d'utilisateurs locaux). Le processus Lsass est en relation avec le processus Winlogon.exe responsable des ouvertures et fermeture de session et avec la partie sécurité de l'exécutif. |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Conhost.exe ( console host) |
Processus hôte des consoles Windows, ce programme permet de gérer les applications console ( comme l'interpréteur de commande cmd.exe) |
Fichier exécutable en mode utilisateur ( un utilisateur ne peut pas le lancer) |
Explorer.exe |
Processus qui gère l'interface graphique de Windows (le bureau). |
Fichier exécutable en mode utilisateur ( un utilisateur peut l'éteindre ce qui ferme le bureau et le relancer) |
Organisation de Windows:
- Powershell
Pour administrer un système windows, Microsoft propose divers outils plus ou moins puissants. Les outils graphiques qui se présentent sous la forme de boites de dialogue sont plutôt destinés à des non informaticiens et ne permettent pas les réglages les plus pointus. Pour effectuer des réglages poussés, il faut souvent utiliser la ligne de commande et PowerShell.
PowerShell est un logiciel développé par Microsoft qui vous propose une console afin de saisir des commandes dans le but de régler certains aspects de Windows, ces commandes sont interprétées par le moteur d'exécution de PowerShell qui est en relation avec Windows. Il est à noter que les commandes peuvent être rassemblées dans un fichier appelé un script que l'on soumet au moteur d'exécution de PowerShell. Un script est un fichier qui contient des instructions à interpréter, le moteur d'exécution traduit les instructions du script en code machine compréhensible par le microprocesseur.
Un script contient des textes ( les commandes à interpréter) contrairement à un fichier executable ( extensions .exe, .com, etc...) qui contient du code machine directement compréhensible par le microprocesseur.
- premier essai
Pour saisir les commandes et les scripts, on peut utiliser le logiciel "PowerShell ISE" qui est présent sur windows 10 et version supérieure.
Un script PowerShell porte l'extension .ps1, il peut être dangereux pour votre système. Afin de protéger Windows, le moteur d'exécution est placé en mode restricted ce qui veut dire qu'il n’exécute pas automatiquement les scripts si on clique dessus, il faut demander l'exécution explicitement. Les administrateurs peuvent modifier la politique de sécurité pour pouvoir déployer des scripts de réglage par réseau. Votre premier test va être de vérifier la politique de sécurité de votre Windows Sandbox.
- Chercher et lancer PowerShell ISE :
- Saisissez la commande " Get-ExecutionPolicy" puis appuyer sur la touche Entrée.
Le moteur va vous répondre Restricted.
Le système est protégé. Si vous obtenez autre chose c'est que la politique de sécurité a été modifiée pendant votre travail.
- Manipulation du système de fichier
L'explorateur Windows vous permet, graphiquement, de créer des dossiers, de rechercher, de copier les fichiers et les dossiers vers un support de stockage, de visualiser les fichiers présents dans un dossier, etc.. PowerShell va rajouter des possibilités avancées de tri et de modifications.
Voyons quelques exemples :
Vous allez analyser le contenu du dossier sysinternals que vous avez copié sur le bureau de Windows sand box:
C:\Users\WDAGUtilityAccount\Desktop\sysinternals
- Si vous affichez le contenu du dossier avec l'explorateur de fichier présent sur le bureau, vous pouvez voir que le dossier contient beaucoup de programmes exécutables.
- La commande Get-ChildItem:
Exercice 2.4
- Demandez à PowerShell de lister le contenu du dossier sysinternals avec la commande Get-ChildItem ( voir commande ci-dessous) , on doit préciser le chemin vers le dossier qui nous intéresse avec le paramètre -Path ( laissez un espace entre la commande et le paramètre)
Extrait du résultat:
- Ajouter maintenant un dossier dans le dossier Sysinternals, ce dossier portera votre nom ( créer le dossier avec l'explorer, la partie entourée ci-dessous en rouge permet de créer un dossier )
- Placez-vous dans votre dossier, faites un clic-droit dans l'espace vide et choisissez "new Text Document" pour ajouter un fichier texte dont le nom sera votre prénom.txt:
- Demandez à PowerShell de lister le contenu du dossier sysinternals avec la commande Get-ChildItem :
La colonne Mode vous apprend si un élément est un répertoire ( lettre d pour directory en Anglais) c'est le cas ici de mon dossier , tous les fichiers sont ici des archives ( lettre a), si un fichier est en lecture seule il aura la lettre r pour read only en Anglais).
Information: un répertoire est le synonyme d'un dossier en informatique.
Archive est un attribut utilisé par les logiciels de sauvegardes, si le a est présent le fichier sera sauvegardé, dans le cas contraire il ne sera pas sauvegardé.
- Faites un clic-droit sur le fichier texte de votre dossier et donner lui le statut caché en cochant la case Hidden en bas à droite
On peut vérifier si un dossier contient des fichiers cachés avec le paramètre - Hidden, voici le résultat pour le dossier mon dossier:
La colonne Mode vous apprend que l'élément appelé un texte est un fichier caché ( lettre h pour hidden en Anglais):
Vous pouvez filtrer les requêtes avec le paramètre -Filter, le caractère * veut dire tous les fichiers ( exemple: *.chm veut dire tous les fichiers d'extension .chm).
Le résultat montre tous les fichiers avec cette extension:
Exercice 2.5
- Saisissez la commande qui permet de filtrer pour afficher tous les fichiers .exe ( si vous avez déjà saisi une commande vous pouvez la rappeler avec la touche du clavier flèche vers le haut et modifier la commande, inutile de tout réécrire) du dossier sysinternals
- La commande Get-Content:
La commande Get-Content permet d'afficher le contenu d'un fichier.
Exercice 2.6
- Ajouter quelques mots dans votre fichier texte.
- Puis saisissez la commande qui permet d'afficher le contenu ( comme ci-dessous):
Dans le cas ci-dessus, voici le résultat, il y a une erreur:
Pourquoi? Quand un chemin contient un espace comme pour le nom du sous-répertoire "mon dossier", on doit entourer le chemin d'apostrophes simples ou doubles ( Ici " C:\Users\............\mon dossier\ un texte.txt" que l'on transmet à -Path ).
Après cette correction, le contenu du fichier s'affiche enfin, on peut voir que le codage UTF-8 du fichier texte n'est pas pris en compte ici:
- La commande Set-Content:
La commande Set-Content permet de créer un fichier avec du contenu ou de remplacer le contenu d'un fichier existant, exemple:
Remarque: si le fichier n'existe pas, il est créé avec le contenu de -Value; si le fichier existe déjà, son contenu est remplacé par celui de - Value.
On peut vérifier que le contenu du fichier texte à bien été modifié:
Exercice 2.7
Utiliser Set-Content pour changer le contenu de votre fichier par celui-ci: " S'il n'y a pas de solution c'est qu'il n'y a pas de problème" , vérifier avec Get-Content.
- Le tuyau:
On peut lier plusieurs commandes avec un tuyau ( a pipe en Anglais) , le symbole | correspond au tuyau, un tuyau redirige le résultat d'une commande vers une autre commande.
Exemple
On veut copier le contenu de tous les fichiers textes du dossier "mon dossier" dans un nouveau fichier appelé texte3:
Exercice 2.8
- Créer deux fichiers textes avec un contenu à l'intérieur.
- Copier le contenu de tous vos fichiers textes du dossier dans un nouveau fichier appelé pensées.txt avec un tuyau.
- Vérifier le contenu de votre fichier pensées.txt avec l'explorateur ou avec Get-Content.
- La commande Copy-Item:
Permet de copier les fichiers et les dossiers d'un point vers un autre. Par exemple, on veut copier tous les fichiers d'extension .txt du dossier mon dossier vers le dossier "Mestextes" du répertoire Documents. On doit les lister avec Get-ChildItem, filtrer les extensions .txt et transmettre le résultat à la commande Copy-Item avec un tuyau. On doit préciser à Copy-Item la destination de la copie qui peut être un dossier sur un support de stockage usb, etc..
Exemple:
Si on consulte le contenu du dossier Documents on voit que tous les fichiers textes du répertoire mon_dossier ont bien été copiés.
Exercice 2.9
- Créer dans Documents un dossier appelé "dossier1" et dans dossier1 un sous-dossier appelé "dossier2"
- Copier tous les fichiers textes du dossier qui porte votre nom dans dossier 2 avec Get-childItem ... | Copy-Item ....
La commande Get-childItem avec le paramètre -Recurse permet d'afficher les fichiers contenu dans tous les sous-dossiers d'un dossier conteneur, ci-dessous les dossiers et sous-dossier de Documents
Résultat:
- Script PowerShell:
Un script powershell est un fichier qui contient un ensemble de commandes PowerShell. Le script est soumis au moteur de script ( PowerShell.exe) qui l'exécute. Par défaut l'exécution de scripts est désactivée parce qu'elle représente une menace importante pour votre système. On va l'activer pour les scripts locaux ( écrits sur cette machine), pour ça il faut modifier la politique d'exécution, qui par défaut est Restricted, on remplace cette politique par RemoteSigned qui exige des scripts signés pour les scripts créés sur une autre machine.
Exercice 2.10
- Saisissez la politique d'exécution RemoteSigned souhaitée, vous devrez confirmer en cliquant sur oui:
- Vérifiez la prise en compte avec Get-ExecutionPolicy:
- Premier script
Vous allez ensuite écrire un script simple qui affiche "Bonjour à tous" quand on l'exécute. Dans un script vous pouvez mettre des commentaires qui sont des phrases explicatives de votre script, de vos commandes, etc.. Un commentaire commence par le caractère # ce qui signale au moteur d'exécution de PowerShell qu'il peut passer à la ligne suivante.
- Saisissez le script ci-dessous qui comprend un commentaire et la commande Write-Host pour afficher sur l'écran:
- Enregistrez le script dans le dossier Documents sous le nom bonjour.ps1
Pour exécuter le script, depuis PowerShell, il faut se placer dans le dossier qui le contient, vous pouvez utiliser la commande Set-Location suivi du chemin vers le dossier. Pour exécuter le script, on saisit ensuite .\bonjour.ps1
- Exécutez votre script pour vérifier qu'il fonctionne.
En dehors de PowerShell, il faut utiliser l'invite de commande cmd pour une exécution locale ou une GPO pour une exécution par réseau. En local avec l'invite de commandes, on précède le nom du script par le nom du moteur d'exécution auquel il se destine, ici le moteur d'exécution est powershell.exe.
Au lancement de cmd, vous n'êtes pas dans Documents, pour s'y retrouver, il faut saisir "cd Documents"
Info: cd est le raccourci pour change directory ( change de dossier)
Exercice 2.11
- Modifiez un script pour qu'il affiche "bonjour tout le monde". Enregistrez la modification, Exécutez votre script avec l'invite de commandes, vous mettrez une capture d'écran du résultat dans votre compte rendu.
- Script avec paramètres
On peut passer un paramètre à un script, le script devra utiliser une variable pour récupérer le paramètre.
Une variable est une zone de mémoire qui contient une information qui peut changer ( information variable) ici le paramètre.
Par exemple, on va passer un prénom au script et il répondra Bonjour suivi du prénom.
Le paramètre est mis à la suite du nom du script au moment de l'exécution ( avec un espace entre le nom et le paramètre):
Pour que le script puisse comprendre qu'il a un paramètre à récupérer, la première instruction du script doit être Param(...) .
A l'intérieur des parenthèses de Param(..), on met une variable qui accueillera le paramètre. Un nom de variable est précédé du caractère $, par exemple $nom peut être un nom de variable pour récupérer notre paramètre. On doit aussi préciser le type de données que va récupérer la variable, pour un texte c'est le type string (on place le type entre crochets juste avant le nom de la variable), voila le script correspondant:
On peut récupérer plusieurs paramètres, il faut alors plusieurs variables pour les recueillir, elles sont séparées par des virgules dans Param:
Information: le type int correspond aux nombres entiers qui est mal adapté pour un âge, il aurait mieux valu choisir le type float (nombre décimal).
Les paramètres qui vont aller dans ces variables sont séparés par des espaces lors du lancement du script:
Réponse du script:
Exercice 2.12
- Ecrire un script appélé "moyenne.ps1" qui affiche la moyenne de 3 nombres entiers passés en paramètre.
L'exécution nécessitera trois paramètres:
Voici la ligne de code du calcul, il utilise l'opérateur de calcul addition ( symbole + ) et l'opérateur de calcul division ( symbole / ):
- Gestion des services
Dans cette partie on va voir comment gérer les services avec PowerShell. Le service Spooler permet de gérer la file d'attente des documents envoyés à l'imprimante. Ce service est démarré Automatiquement au démarrage de Windows:
On peut vérifier son statut actuel avec PowerShell:
Ici c'est Running (en exécution)
- Arrêt du service avec Stop-Service et vérification du nouvel état avec Get-Service:
- Remplacement du statut "démarrage Automatique" par le mode de démarrage Manuel:
Exercice 2.13
Vérifier l'état du service Telephony ( saisir services dans la barre de recherches puis sur ouvrir)
Cliquer droit sur le service et afficher properties
Verifier le statut du service TapiSrv qui gère Telephony
- Écrire les lignes de code d'un script appelé set-tel ps1 pour commuter le service "Telephony", actuellement en mode Disabled), en mode Manuel.
Le script modifiera le statut de démarrage en manuel avec Set-Service puis affichera l'état sur du service avec Get-Service
- Tester le script, ajouter une capture d'écran du code du script dans votre compte rendu.
- Vérifier le résultat visuellement:
- Gestion des utilisateurs
Voici comment ajouter un utilisateur au système: on commence par définir le mot de passe tralalatsointsoin associé à la variable $pwd, On crypte ce mot de passe avec ConvertTo-SecureString avant de l'affecter à la variable. On créé ensuite l'utilisateur Top avec la commande New-LocalUser, Top aura le mot de passe $pwd soit tralalatsointsoin.
On peut vérifier avec le composant Gestion de l'ordinateur que l'utilisateur a bien été créé:
On vérifie ensuite les informations sur le compte:
Vous pouvez voir le SID qui est l'identifiant de sécurité créé par l'OS, il sera utilisé par Windows pour connaître les droits de cet utilisateur.
On va ensuite compléter ce compte avec le nom complet de l'utilisateur et une description:
Les utilisateurs appartiennent à des groupes ce qui leur donne ou leur enlève des autorisations d'accès, voici tous les groupes de Windows 10:
Ajoutons Top au groupe Administrateurs qui possède tous les droits sur la machine:
Vérification:
Exercice 2.14
Écrire les lignes de code d'un script appelé moi. ps1 pour créer vous même en tant que nouvel utilisateur rattaché au groupe Administrateurs. Tester le script, ajouter une capture d'écran du code du script dans votre compte rendu.
Désactiver maintenant le compte créé avec la commande:
- Lancement d'une tâche planifiée
Le planificateur de tâche sert à lancer des actions automatiquement de manière répétitive ( tous les jours à heure fixe ou à l'ouverture de session, etc.. ) ou unique ( une seule fois à telle heure). On peut ainsi faire du nettoyage, des sauvegardes etc.. Le planificateur de tâche peut lancer des scripts ou des programmes.
L'exercice suivant va consister à ouvrir le fichier texte "texte1.txt" avec notepad à 16h45 une seule fois.
Voici le script, la première ligne créée la variable $action qui contient l'action à réaliser. La deuxième ligne créée une variable $trigger ( déclenchement) qui décrit quand se lancera la tâche. La troisième ligne crée la variable $settings ( réglages spéciaux) et n'en propose aucun. La quatrième ligne créée la variable $inputObject qui est un objet qui représente la tâche. La ligne 5 enregistre la tâche sous le nom "tache powershell"
On enregistre la tâche sous le nom "lancenotepad.ps1" et on l'exécute:
Exercice 2.15
Créer une image verte avec paint dans le dossier Documents
Écrire les lignes de code d'un script appelé lancepaint. ps1 pour ouvrir l'image vert.jpg du dossier Documents
avec mspaint.exe dans 10 mn une seule fois. La tache s'appellera tache paint.
Tester le script, ajouter une capture d'écran du code du script dans votre compte rendu.
Supprimer la tâche avec la commande:
- Le registre
Le registre est le nom de la base de données qui sauvegarde tous les réglages de Windows. Cette base est consultée par Windows et les programmes pour se configurer. Le logiciel regedit.exe permet d'afficher et modifier le contenu de cette base. Attention une mauvaise manipulation avec regedit peut rendre votre Windows inopérant.
PowerShell permet d'afficher et modifier le contenu de la base à partir de commandes ou de scripts.
- Organisation du registre
Le registre peut être vu comme une arborescence avec des dossiers principaux, des sous dossiers et des contenus.
Les dossiers principaux s'appellent:
HKEY_CLASSES_ROOT : contient les associations de fichiers ( .docx s'ouvre avec WORD, etc..) et d'autres éléments qui sortent du cadre de ce cours.
HKEY_LOCAL_MACHINE: contient les réglages de l'ordinateur.
HKEY_USERS: Contient les réglages choisis par les divers utilisateurs qui ont un compte sur le PC.
HKEY_CURRENT_USER: contient un lien vers les parties de HKEY_USERS qui correspondent aux réglages de l'utilisateur qui a ouvert une session sur l'ordinateur.
HKEY_CURRENT_CONFIG: contient un lien vers vers les parties de HKEY_LOCAL_MACHINE qui correspondent à la configuration en cours de l'ordinateur.
A l'intérieur des sous-dossiers, il y a des éléments appelés clés. Chaque clé a un nom et contient une valeur sous la forme d'un nombre ( types REG_DWORD ou REG_BINARY) , ou d'un texte ( type REGZ), qui représente un réglage de Windows ou un réglage d'un programme ou d'un utilisateur. Les réglages peuvent s'appliquer à la machine, ils sont alors placés dans les sous dossiers de HKEY_CLASSES_ROOT et HKEY_LOCAL_MACHINE ou être dépendant de l'utilisateur, ils sont alors stockés dans HKEY_USERS .
Exemple: la clé qui stocke le numéro de série de Windows s'appelle ProductId, elle est dans un sous-dossier appelé CurrentVersion de HKEY_LOCAL_MACHINE :
Voici son contenu affiché avec regedit:
- Manipulation du registre avec PowerShell
Pour des raisons de sécurité, on se contentera ici de lire les données du registre mais PowerShell permet également de créer des clés et de modifier les clés existantes.
- La commande GetItemPropertyValue:
Permet de lire une clé du registre, elle nécessite deux paramètres: -Path qui précise dans quel sous-dossier est la clé et -Name qui précise le nom de la clé qui vous intéresse dans ce sous-dossier.
Exercice 2.16
- Saisissez la commande ci-dessous qui affiche le numéro de produit de votre Windows 10. Mettez une copie d'écran du résultat dans votre Compte rendu.
- Modifiez la commande précédente pour créer un fichier sur le bureau appelé "produitid.txt" qui recevra le résultat de
Get-ItemPropertyValue ( vous devez utiliser un tuyau, revoir la partie Powershell).
- Modification du registre
Lorsque vous utilisez votre ordinateur, vous provoquez des modifications du registre chaque fois que vous effectuez un réglage comme choisir un fond d'écran, etc.... Windows consulte le registre quand vous demandez l'affichage de certaines choses.
Pour illustrer ce propos, voici comment se passe le changement de fond d'écran ( Vous ne pourrez pas le faire, il faut un Windows activé pour ça et ce n'est pas le cas de Sand box)
Les fonds d'écran proposés par Microsoft sont placés dans le dossier: C:\Windows\Web\Wallpaper
Lorsqu'on effectue un clic droit sur le bureau avec un Windows activé, qu'on sélectionne Personnaliser, Windows affiche le texte Choisissez votre image avec l'image actuellement en fond d'écran et les quelques autres du sous-dossier wallpaper:
Pour savoir quelles images afficher en dessous du texte Choisissez votre image , Windows consulte le sous dossier Wallpapers du registre:
Voici ce qu'il contient sur un windows 10 activé:
La clé BackgroundHistoryPath0 contient votre fond d'écran actuel et les autres clés BackgroundHistoryPath.. contiennent les fonds d'écran proposés en dessous du texte Choisissez votre image.
Le type des données associé aux clés BackgroundHistoryPath.. est du texte ( chaîne de caractères en informatique, le nom de ce type de donnée dans le registre est REG_SZ)
Exercice 2.17
Vous allez changer de fond d'écran en utilisant le logiciel "Bginfo.exe" présent dans le dossier Sysinternals du bureau. Bginfo.exe fabrique un fond d'écran à partir de celui qui est actuellement choisi et lui ajoute des infos sur le PC.
Bginfo stocke le fichier du fond d'écran créé dans le dossier "C:\Users\WDAGUtilityAccount\AppData\Local\Temp" et le nomme "BGinfo.bmp"
- Lancez Bginfo.exe puis cliquez sur OK
Un nouveau fond d'écran est créé avec des infos sur le PC:
Le fichier correspondant à ce fond d'écran est dans le dossier C:\Users\WDAGUtilityAccount\AppData\Local\Temp
Vous allez afficher le contenu de ce dossier avec une variable d'environnement ( les variables d'environnements sont expliquées dans le chapitre suivant). La variable %temp% contient le chemin vers le dossier temporaire de Windows C:\Users\WDAGUtilityAccount\AppData\Local\Temp, ce dossier est utilisé pour les stockages temporaires d'informations comme les mises à jour des programmes en cours, etc..
- Saisissez %temp% dans le chemin de recherche de Windows pour accéder au dossier puis cliquez sur le dossier %temp% proposé, vous pouvez voir qu'il contient bien le fichier de l'image BGinfo.bmp:
- Avec Regedit ouvrez la clé ci-dessous:
Vous pouvez voir une nouvelle clé dont la valeur est l'emplacement du fond d'écran créé par Bginfo.exe:
- Conclusion :
Vous venez de voir que votre activité sur l'ordinateur a modifié le registre, le programme explorer de Windows consulte le registre pour définir le contenu des boites de dialogues qu'il vous affiche.
- Les variables d'environnements
Les variables d'environnement, présentes depuis les premières versions de l'OS de Microsoft, permettent de véhiculer simplement des informations entre les programmes en cours d'exécution. De nos jours, elles sont moins utilisées et remplacées par le registre mais elles restent présentes et utilisées par certains programmes.
- Notion de variable et de variables d'environnement
Les variables "système" contiennent des données sur le système comme les chemins vers certains dossiers. Les variables système sont communes à tous les utilisateurs d'un même ordinateur, elles sont valables pour la machine.
Les variables "utilisateur" contiennent des données qui ne sont valables que pour un seul utilisateur de la machine.
Une variable d'environnement est soit une variable système soit une variable utilisateur. Lorsque l'on lance un programme, le parent du processus qui représente le programme lui donne une copie de toutes ses variables d'environnement. Si le processus enfant veut connaître une information contenue dans une variable d'environnement, il consulte la zone de mémoire qui la contient ( c'est une alternative à la consultation du registre). Si le processus enfant modifie une variable, il modifie sa copie et pas celle du processus parent. Les variables d'environnement sont enregistrées sous la forme d'une liste de valeurs situées dans certaines clés précises du registre. Le nom de la clé correspond au nom de la variable d'environnement.
Le contenu de ces valeurs est de type texte (le nom de ce type de donnée dans le registre est REG_SZ ou REG_EXPAND_SZ pour le type chaîne "extensible"). Ces valeurs ne peuvent pas être manipulées avec l'éditeur de registre regedit, il faut utiliser RegEdt32 ou PowerShell pour pouvoir le faire.
• Les variables utilisateur sont stockées sous la clé :
HKEY_CURRENT_USER\Environment
• Les variables système sont stockées sous la clé :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Ces clés sont lus par un processus parent et transmises à son processus enfant au moment de sa création. Quand vous lancez un programme, explorer.exe lit ces clés et transmet les variables contenus dans ces clés à votre programme qui est son processus enfant. Si votre programme a été conçu pour, il peut consulter les variables d'environnement pour connaître certaines configurations du système ou de l'utilisateur.
Voici quelques variables communes à la plupart des versions de Windows:
• %TEMP% : répertoire temporaire de Windows pour l'utilisateur courant. Vous l'avez rencontrée dans le chapitre précédent.
• %Winbootdir% : répertoire de démarrage de Windows.
• %PATH% : emplacement des programmes exécutables et des DLL (les éléments de cette variable sont séparés par des points virgules). Cette variable est utile pour pouvoir lancer un programme à partir de l'invite de commande cmd.exe, ce dernier consulte le contenu de cette variable pour savoir où est le programme exécutable que vous voulez lancer à partir de l'invite de commandes s'il n'est pas dans le dossier courant.
• %Windir% : répertoire où est installé le système Windows.
• %COMPUTERNAME% : nom de l'ordinateur
• %HOMEPATH% : dossier par défaut pour les utilisateurs.
• %NUMBER_OF_PROCESSORS%: nombre de processeurs installés.
• %OS% : nom du système d'exploitation.
• %PATHEXT% : liste des extensions de fichier reconnus comme des exécutables.
• %PROCESSOR_ARCHITECTURE% : type de processeur installé.
• %PROCESSOR_IDENTIFIER% : identification du processeur installé (type, modèle, etc.).
• %USERNAME% : nom de l'utilisateur courant.
• %USERPROFILE% : chemin du profil de l'utilisateur courant.
Exercice 2.18
On peut utiliser ces variables comme raccourcis.
- Saisissez %Windir% puis appuyer sur entrée ou cliquez sur Ouvrir
- Où êtes vous dans le système de fichier?
La variable %PATH% contient le chemin des fichiers exécutables. Lorsque l'on demande à Windows de lancer un programme depuis la console, si le fichier n'est pas dans le dossier d'où on lance la demande, Windows recherche le programme dans tous les chemins cités dans la variable %PATH% jusqu'à ce qu'il le trouve le fichier et l'exécute; ça vous permet donc de lancer un programme en dehors du dossier où est placé le fichier de ce programme.
Dans l'exemple ci-dessous, on tente de lancer mspaint le fichier exécutable de Paint depuis le dossier c:\users\WDAUtilityAccount qui ne le contient pas ( l'image de gauche vous montre le contenu de c:\users\WDAUtilityAccount) , l'image de droite ci-dessous vous montre l'emplacement de mspaint:
Windows ira chercher le chemin du programme dans la variable %PATH%, le chemin C:\Windows\system32 qui contient mspaint.exe est bien dans le Path:
Extrait de la variable %Path%:
Le programme se lance donc depuis n'importe quel dossier:
Exercice 2.20
Dans cet exercice, vous allez voir comment ajouter une information dans une variable d'environnement.
Ajoutons le chemin de procexp dans %PATH%:
- Relever l'emplacement de procexp et Copier le chemin " C:\Users\..."
- Dans le menu windows system faire un clic droit sur "This PC"
- Choisir More puis Properties:
- Choisir Advanced system settings
- Choisir Environment Variables:
Choisir Path dans System Variables puis cliquer sur Edit:
Cliquez sur New et ajouter le lien vers le dossier qui contient procexp:
Ici tout votre travail sera malheureusement sans effet parce que Windows SandBox ne conservera pas vos réglages à la fermeture de la fenêtre. Sur le vrai Windows ça aurait permis de lancer procexp.exe de n'importe où.
- Afficher et modifier les variables d'environnement
En ligne de commande la commande set suivi du nom de la variable permet son affichage. Vous pouvez utiliser des lettres minuscules ou majuscules:
Exemple, affichage de la variable %machin% qui n'existe pas:
La commande set suivi de nom de la variable = nouvelle valeur modifie ou crée la variable.
Exemple, création de la variable %machin% qui vaut bidule:
Maintenant la variable existe:
- Conclusion:
Les variables d'environnement sont utilisées par Windows et les divers programmes pour avoir des renseignements sur la configuration du système ou pour s'échanger des données. En tant qu'utilisateur d'un PC, vous pouvez vous en servir comme raccourci pour accéder à un dossier. En tant que programmeur, vous serez parfois amené à modifier la variable %path% pour permettre à votre invite de commande de localiser certains programmes.
Une variable d'environnement peut être constituée à partir d'une autre variable d'environnement:
%USERPROFILE% = c:\Users\ISN
%TEMP% = %USERPROFILE%\Appdata\Local\Local\temp = c:\Users\ISN\Appdata\Local\temp
Created with the Personal Edition of HelpNDoc: Write EPub books for the iPad