18/12/2024

PowerShell

Introduction à PowerShell

I. Présentation

Vous l'aurez peut-être aperçu sur votre Windows 7 au détour d’un menu ou dans la barre des tâches de votre Windows Serveur 2008.

Powershell est le grand frère de notre cmd.exe (batch). Il fonctionne sur les plateformes Microsoft depuis XP SP3 et 2003 serveur SP2 (KB à télécharger + Framework .NET 2.0 SP1 requis) et est intégré nativement dans Windows 7 et Windows 2008 serveur. C'est un langage de script orienté objet performant et très riche puisqu'il s'appuie sur les composants du Framework .NET de Microsoft, des objets COM et WMI. L'extension d'un script Powershell est « .ps1 ».

Vous le trouverez sous le menu Démarrer > Accessoires > Outils Système > Windows PowerShell

Powershell dispose d'une aide embarquée que vous pouvez appeler par la commande « Get-Help » :

Get-Help commande

La liste des commandes de base est disponible via « Get-Command ».

Powershell est capable d’utiliser des alias de commandes afin de raccourcir les lignes de codes. Vous pouvez en créer de nouveau en utilisant la commande « Set-Alias ».

Quant à la commande « Get-Alias », elle permet de lister les alias (raccourcis) des commandes Powershell. A noter que ces alias préenregistrés rappelleront des souvenirs du batch ou du bash pour certains…

La syntaxe du PowerShell « se lit », les commandes commencent généralement par Get, Set, Add, Remove. Par exemple : Get-Item, Set-Alias, Add-Content, Remove-Item.

II. Déclaration d'une variable

La variable en PowerShell est précédé du signe $ comme ci-dessous, et son appel se fait en écrivant : $nomVariable

powershell4

Vous remarquez que PowerShell est assez intelligent pour repérer sans déclarer le type de la variable que celle-ci est une chaine de caractères (string) puisque nous avons mis un élément entre guillemets.

powershell5

Si maintenant je souhaite spécifier un type fixe à ma variable, par exemple un entier vous pouvez le déclarer comme ceci.

powershell6

La variable porte pourtant sa valeur entre guillemets comme si elle était de type string mais le type est forcé par [int].

Les types les plus utilisés sont les suivants :

Type

Description

string

 Représente du texte sous forme d'une série de caractères Unicode.

char

 Représente un caractère sous forme d'une unité de code UTF-16.

byte

 Représente un entier non signé 8 bits.

int

 Représente un entier signé 32 bits.

long

 Représente un entier signé 64 bits.

bool

 Représente une valeur booléenne.

decimal

 Représente un nombre décimal.

single

 Représente un nombre à virgule flottante simple précision.

double

 Représente un nombre à virgule flottante double précision.

array

 Représente un tableau

III. Le Pipeline

Le pipeline nous permet de passer en une ligne plusieurs commandes afin d'effectuer des combinaisons. Ce qui a plusieurs avantages, que l'on pourrait qualifier de souple, précis, et puissant. La séparation des commandes est faite par le signe « | ».

powershell7

Nous avons ici passé dans le pipeline 2 commandes distinctes : Get-Alias et Where (alias de Where-Object) afin de créer une seule commande qui sera elle plus complète.

Cette commande si nous la lisons signifie : Liste-moi les alias dont le nom est équivalent à ls.

IV. Manipuler les objets

Maintenant que nous savons utiliser le pipeline il est temps de manipuler les objets. Un objet est une entité dont dépende des éléments (propriétés) et des actions (méthode), par exemple :

Prenons comme objet un ordinateur. Celui-ci possède des propriétés (processeur, disque dur…) ainsi que des méthodes (s’allumer, afficher…).

Un objet Powershell fonctionne exactement de la même manière. Nous utilisons une commande, cette commande possède des propriétés et des actions que Get-Member est capable de nous renvoyer.

Note : Nous aborderons dans un prochain tutoriel la création d’objet personnalisé.

Vous l’avez vu si je souhaite renvoyer dans une variable le contenu d’une commande il suffit de procéder de la manière suivante :

$variable = MaCommande

Maintenant je souhaite utiliser les propriétés de cet objet. Je passe donc par le pipeline avec Get-Member :

$var | Get-Member

powershell8

Cette commande nous retourne toutes les possibilités que ce soit au niveau des propriétés ou des actions (Method) sur cet objet. Cf : Colonne "MemberType".

Je vais maintenant utiliser la propriété LastAccessTime de cet objet (notre variable) :

powershell9
Il est également possible d’accéder à cette information sans passer par la case variable comme ceci :

powershell10

V. Les objets WMI

Ils sont utilisés globalement pour obtenir des informations sur le système d’exploitation et l’ordinateur. La liste des classes WMI est disponible via la commande :

Get-WmiObject –list

Voici l’utilisation la plus simple de la commande Get-WmiObject avec une classe WMI pris au hasard (Win32_BIOS):

powershell11

Afin d’écrire votre premier script il vous faut le signer ou désactiver la protection sur l’exécution des scripts (cette manipulation est à faire avec le shell ouvert en tant qu’administrateur via la commande Set-ExecutionPolicy RemoteSigned.

Vous pouvez voir la stratégie en place de la même manière via Get-ExecutionPolicy.

A vos shell !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.