Introduction à PowerShell
Sommaire
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
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.
Si maintenant je souhaite spécifier un type fixe à ma variable, par exemple un entier vous pouvez le déclarer comme ceci.
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 « | ».
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
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) :
Il est également possible d’accéder à cette information sans passer par la case variable comme ceci :
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):
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 !