Définition

PowerShell est un langage script fondé sur la programmation orientée objet. Le logiciel PowerShell  est l'interpréteur de l’interface en ligne de commande de l'environnement de développement Windows PowerShell.

 

Les différences entre Méthodes et Propriétés

PowerShell est un langage orienté “objet”. C'est à dire que PowerShell considère tout les éléments qu'il traite ainsi. Pour vous expliquez cela, je vais prendre comme exemple une voiture. Une voiture a des propriétés comme sa couleur, sa forme, sa taille etc…et ses méthodes seraient donc rouler, tourner, avancer, reculer etc… 

Pour être concret, un service a comme propriétés son nom, son statuts et comme méthodes démarrer, arrêté, en attente etc…et bien PowerShell fonctionne ainsi.

on verra plus tard comment lister tout ces éléments et savoir si nous sommes devant une propriété ou une méthode.

Les raccourcis clavier

Avant de se lancer tête baissée, dans PowerShell, deux raccourci clavier sont indispensables dans le sens ou il vont vous permettre d'obtenir de l'aide et de gagner du temps.

  1. tabulation: vous permet de faire de la complétion, c'est à dire compléter le mot que vous êtes en train d'écrire.
  2. ctrl + espace: lorsque vous souhaitez connaitre toutes les options d'une commande PowerShell, via ce raccourci, une liste de toutes les options possibles d'une commande vous sera suggérées voir même vous afficher des éléments pour compléter cette même option.

alors, à consommer sans modération.

allez hop c'est parti….

 

Les commandes ou applets de commande (cmdlet)

Elles sont composées d’une paire de la forme “verbe ”-“nom” destiné à en faciliter la mémorisation.

exemple :

Get-Service

get = verbe

service = nom

simple non?

Les variables

Une variable PowerShell est un emplacement de stockage provisoire en mémoire destiné à recueillir une valeur, un objet ou une collection d’objets.
Les variables sont généralement nommées, et leurs noms sont toujours précédés d’un symbole “$“
Les variables sont automatiquement “typées” lors de l’affectation de valeur (si elles ne sont pas déclarées au préalable.)

Exemple :

$variable = une valeur 

 

Le pipeline

Le pipeline, symbolisée par le caractère “|” (AltGr + 6) permet d'exécuter plusieurs commandes à la suite.

Exemple : 

Get-Process | Sort-Object CPU

Dans ce cas précis, la commande Sort-Object tri les processus par utilisation de Cpu

 

L' aide

Sous PowerShell la commande Get-Help permet d'afficher la fonction et des exemples d'une commande.

Get-Help  <la commande>

Mais avant d'utiliser cette commande il faut faire une mise à jour de l'aide de PowerShell avec la commande

 Update-Help

Cette commande Get-Help permet d'avoir une aide de manière très générale si on souhaite obtenir plus d'information on peut ajouter l'option -detailed

Get-Help <la commande> -detailed

On peut aussi lister des exemples d'utilisation d'une commande avec l'option -examples

Get-Help <la commande> -examples

Il arrive parfois que l'aide renvoyée sous PowerShell ne soit pas complète malgré un Update-Help.

Pour cela il y a possibilité d'aller consulter directement l'aide en ligne avec l'option -online 

Get-Help <la commande> -online

Si vous voulez de l'aide sur la syntaxe d'une commande, PowerShell indique par “[ ]” si le paramètre est obligatoire.

Par exemple si vous voulez de l'aide sur la syntaxe de commande Get-ChildItem 

Get-Help Get-ChildItem

On peut constater dans la capture que certains paramètres sont obligatoires.

 

 

La commande Get-Help permet également de rechercher une commande si, par exemple, vous souhaitez trouver une commande qui gère les services.

Get-Help service

Voici ce que renvoie la commande, on peut voir les commandes qui contiennent le mot service.

 

Une autre fonction de l'aide permet d'avoir des informations sur un sujet précis.

Pour lister ces sujets utilisez l'option about_* 

Get-Help about_*

Par exemple, si vous voulez de l'aide au sujet de pipeline

Get-Help about_pipeline

Voici ce que renvoie la commande

 

Lister les méthodes et les propriétés

Maintenant que nous avons vu, comment était composée une commande, le pipeline et l'aide, il est temps, comme je vous les dis dans le premier chapitre que tout était objet dans PowerShell. C'est à cet instant que nous alors voir quel commande va nous permettre de lister tout cela.

Get-Member est la commande qui nous dis quels sont les propriétés et les méthodes que nous pouvons appliquer à un objet.

un exemple concret est plus parlant:

(Vous remarquerez que j'utilise la commande Get-Service, que je récupère toutes les méthodes et propriétés en passant par une seconde commande Get-Member et pour enchainer ces commandes je passe par un pipeline)

C'est à partir de ces éléments qu'à présent on peut savoir quelles sont les propriétés et les méthodes d'un service. 

Par exemple: Pause, Stop, Refresh sont des méthodes. Displayname, Servicename, ServiceType sont des propriétés.

Les providers

Dans PowerShell,  les providers permettent d'accéder par exemple à la base de registre, aux fichiers système à l'environnement etc…

Pour lister l'ensemble des providers, on utilise la commande

Get-Psdrive

L'avantage c'est que vous pouvez parcourir ces éléments comme si c'était un système de fichiers.

Exemple, si vous voulez parcourir la base de registre machine  il suffit de taper cd hklm : et vous vous retrouvez dans la base de registre et la parcourir comme si c'était un filesystem et revenir dans votre arborescence Windows avec un cd c:.

Vous avez ensuite la possibilité de créer ou de consulter des entrées dans la base de registre comme si c'était un filesystem et utiliser les commandes de base.

Exemple avec la commande Get-ChildItem ,vous pouvez consulter toute la base de registre de votre hkey local machine

 

Récupérer des informations WMI et CIM

en cours de construction….

Wmi (Windows Management instrumentation),implémenté dans Windows, permet d'obtenir des informations sur un système et même à distance tel que la version du bios, le nom de la machine, le fabricant, le modèle, la date d'installation etc. il permet en quelques sortes d'interroger l'inventaire matériel et logiciel de votre système. 

Il existe deux commandes pour obtenir ces informations, mais on peut également invoquer des méthodes et des propriétés avec celle-ci, par exemple redémarrer un service, demander des infos sur vos disques et je vais vous montrez les différences qu'il peut exister. 

Pour finir je vous montrerai une astuce pour “fouiner” dans la liste des requêtes WMI et CIM.

  1. Get-WmiObject : cette commande se base sur du RPC (Remote Procedure Call).
  2. Get-CimInstance: cette commande se base sur du WINRM (Windows Remote management).

Création d'un menu sous Powershell

Voici un exemple de menu qu'il est possible de faire avec la méthode suivante :

 

Principe de fonctionnement

Nous avons besoin de déclarer une variable qui va servir en quelque sorte de bouton “allumé” ou “éteins” : $continue = $true

Avec cette variable j'utilise une boucle pour permettre de laisser en permanence l'affichage : 

While ($continue)
{
	<le menu avec des Write-Host>
}

Puis une seconde variable pour stocker mon choix avec $choix = read-host “faire un choix”

Suivant l'état de ce choix le script sortira de la boucle while et cela provoquera soit une action du script soit une sortie du script avec switch ($choix).

Le switch va permettre d'indexer les choix ,de les lister et d'exécuter les commandes.

Pour sortir du script si vous faites le choix ‘x’ le script passe la variable $continue à false ce qui aura pour effet d'arrêter la boucle while.

La commande default permet de renvoyer un message d'avertissement si vous rentrez un choix qui n'est pas dans le menu.

 

Exemple

$continue = $true
while ($continue){
	write-host “----------------------MON TITRE -----------------------”
	write-host “1. mon action 1”
	write-host "2. mon action 2"
	write-host "x. exit"
	write-host "--------------------------------------------------------"
	$choix = read-host “faire un choix :”
	switch ($choix){
		1{commande de mon action 1}
		2{commande de mon action 2} 
		‘x’ {$continue = $false}
		default {Write-Host "Choix invalide"-ForegroundColor Red}
	}
}