Flash info

"Les IT Pros sont en train de migrer rapidement car PowerShell est plus facile et plus puissant que VBScript."

Microsoft Scripting Guys

 
Les objets
Appréciation des utilisateurs: / 165
FaibleMeilleur 
Écrit par Robin Lemesle   
29-12-2006

Qu’est-ce qu’un objet ?
Les différents types
Comment les créer ?
Utiliser les objets ?
Qu’ont-ils donc que vous ne savez pas ?
Passez à la vitesse supérieure avec les objets

Introduction


Sauf si deux agents des services spéciaux informatiques armés jusqu’aux dents vous sont tombés dessus en vous menaçant de vous punir si vous n’utilisez pas PowerShell, vous n’êtes pas là par hasard, et t’en mieux car cette rubrique est le passage obligé pour un bon apprentissage de PowerShell, car les objets sont ce qui fait la force et la maniabilité de PowerShell.

Oui mais c’est quoi l’intérêt ?

Croyez moi les avantages que procurent l’utilisation des objets valent largement la peine de s’y pencher un moment. Les objets PowerShell vont vous faciliter la vie.
Imaginez pouvoir réaliser un script d’administration ou autre en une seule ligne de commande alors qu’il vous en fallait une dizaine avant ! Intéressant non ? Alors suivez le guide…

Qu’est-ce qu’un objet ?

Quand vous utilisez PowerShell, les entrées et sorties de commande vont se présenter comme du texte mais en fait se sont des objets. Mais qu’est-ce qu’un objet ?

La réponse est évidente pour ceux qui connaissent déjà les langages orientés objets mais elle l’est moins pour les autres. Pour tenter de définir ce qu’est un objet, on pourrait faire le parallèle avec un de nos objets de la vie courante.

Prenons par exemple une voiture (évidemment si l’objet ne vous convient pas vous pouvez changer…)

Cet objet (la voiture donc !) vous apparaît comme un objet unique, cependant elle correspond bien à une catégorie d’objet (la catégorie des véhicules) c’est ce qu’on appellera le « type ». Vous pouvez aussi lui faire faire une multitudes d’actions, baisser une vitre, démarrer, avancer, reculer, …, c’est ce qu’on appellera des « méthodes ». Vous pouvez également obtenir des informations sur celle-ci : marque, modèle, couleur, température moteur, pression des pneus si vous avez la chance que votre « objet » dispose de cette option :-), c’est ce qu’on appellera des « propriétés ».

Les objets en PowerShell (et dans bien d’autres langages) sont constitués de la même manière : un type, des méthodes et des propriétés.


D'accord, mais à quoi ça sert ? 

Imaginons que votre objet soit un fichier texte, alors PowerShell vous met à disposition plus d’une quarantaine de méthodes et une bonne vingtaine de propriétés.
Rien de plus facile pour vous que d’interagir avec votre fichier pour en modifier le nom, le chemin, la date de la dernière lecture, et ce sans aucune fonction !!! Simplement en utilisant les méthodes de l’objet. Fini l’analyse d’un résultat avec une chaîne de caractères.

 

Les différents types

Avec PowerShell, en plus des objets que vous manipulez sans vraiment le savoir avec les cmdlets, vous allez rencontrer d’autres types d’objet :

Les objets WMI
 

Les objets WMI (Windows Management Instrumentation) concernent la gestion des systèmes.

C'est-à-dire que vous allez pouvoir obtenir facilement (enfin si vous nous avez bien lu) une multitude d’informations sur votre système, allant du service pack installé sur votre ordinateur au taux d’utilisation processeur en passant par la mémoire disponible. Votre système n’aura plus de secret pour vous.

 

Exemple : 

   Voici un petit exemple qui vous montre comment obtenir le type et la quantité de mémoire cache que vous avez sur votre PC. Même si vous ne comprenez pas tout, ne vous inquiétez pas car cet exemple fait intervenir des choses que nous n’avons pas encore vues. Observez seulement que l’on utilise la commande Get-WmiObject pour appeler un objet « Win32_cacheMemory »

PS C:\> Get-WmiObject -Class Win32_CacheMemory -Namespace root/cimv2 -ComputerName . | Format-Table -Property name,purpose, installedsize

   Et on obtient: 

name                                                        purpose                                installedsize
----                                                                   ----                                            ---

Mémoire cache                                               L1 Cache                                   128
Mémoire cache                                               L2 Cache                                   512·


Les objets COM

Les objets COM pour Component Object Model étendent l’utilisation de PowerShell à toutes les applications de votre système disposant d’API (Application Programming Interface) COM.

Explication : les objets COM qui sont « publiques », distribués généralement avec vos applications (Microsoft Office, par exemple) vont vous permettre d’agir sur ces applications en question.

 

Comment les créer ?


Objets WMI

 

Les objets WMI sont directement disponibles depuis la console, c'est-à-dire qu’il n’y a pas besoin de les créer puisqu’ils le sont déjà. Cependant nous allons vous montrer comment les récupérer.

Pour accéder à des objets WMI de façon à ce que vous puissiez réaliser des opérations spécifiques il vous faut utiliser Get-WmiObject –list.

Cette commande va vous permettre de lister toutes les classes WMI.

Petite parenthèse : C’est quoi une classe ?

Oui, j’allais oublier de vous en parler. Pour faire bref, en programmation objet, une classe contient les méthodes et les propriétés qui s'appliquent à l’objet.

Une fois vos classes listées, c’est à vous de faire votre choix, il y en a plus de huit cent classes WMI, oui je sais ça en fait beaucoup. Sachant que certaines d’entre elles contiennent des dizaines de propriétés, vous comprenez maintenant qu’on ne vous a pas menti quand on disait que vous alliez TOUT savoir sur votre système.

Heureusement le nom des classes est assez explicite.

Application·:

Listage des classes WMI

PS> Get-WmiObject –List 

 Astuce :

La ligne de commande suivante vous donnera le nombre de classe WMI.

 

PS C:\>  $i=0;Get-WmiObject -list | foreach{$i=$i+1} ; Write-Host "Il y a $i membre(s)"

 

Objets .NET et COM

Quand on veut utiliser ce type d’objet, on va créer ce que l’on appelle une nouvelle instance de cet objet. Et pour cela, on utilise la commande « New-object ».

Dans un premier temps cette nouvelle instance d’objet que nous créons sera stockée dans une variable de façon à pouvoir interagir avec plus tard.

Application :

PS C:\> $xls = New-Object -ComObject Excel.Application


Voilà une nouvelle instance de l’objet Excel vient d’être créée, son nom est xls.

Utiliser les objets ?

Une fois votre objet créé, vous pouvez regarder toutes les méthodes et propriétés dont il dispose par la commande Get-Member.

Exemple :

PS C:\> New-Object -ComObject Excel.Application | Get-Member

Remarquable non ? Veuillez remarquer que cette commande est unique en son genre. Quel autre langage de programmation la possède ? Vous n’aurez donc plus à vous plonger dans la documentation pour trouver les propriétés et méthodes des objets en PowerShell !!! 

Ensuite pour les utiliser, il vous suffit de séparer le nom de l’objet de sa méthode ou propriété par un point.

Petit exemple :

Cet exemple vous montre les différentes étapes, de la création d’un objet COM jusqu'à l’utilisation de ses propriétés et méthodes. 

Création de l’objet

PS C:\> $xls = New-Object -ComObject Excel.Application


Application de la valeur vrai à la propriété « visible »

PS C:\> $xls.Visible = $true

Résultat : la fenêtre Excel s’affiche sur votre PC. On utilise la méthode Add()

PS C:\> $xls.Workbooks.add() 


Résultat: un nouveau classeur est créé

On fait appel à la méthode SaveAs avec en paramètre un chemin

PS C:\> $xls.ActiveWorkbook.SaveAs("C:\temp\essai.xls")

 

Résultat : Sauvegarde du classeur dans C:\temp

 

Qu’ont-ils donc que vous ne savez pas ? 


 

Maintenant vous savez donc qu’on peut interagir de manière simple et rapide avec tous les objets PowerShell.

Mais ce que vous ne savez pas encore c’est que ces objets prennent toute leur valeur quand ils sont combinés entre eux grâce au « pipeline ». Bien que vous l’ayez déjà vu dans des exemples vous ne savez pas encore tout à fait ce que c’est.

Explication : le pipeline qui veut dire « canalisation » en anglais, sert à établir une liaison entre deux commandes. Matérialisé par le caractère « | », il va vous transférer la sortie de la commande qui le précède vers l’entrée de la commande qui le succède. Vous me suivez ? ;-)

   Exemples de redirection : 

Exemple 1 :

PS C:\> Get-Command | Out-File -FilePath C:\temp\fichier.txt

  La sortie de la commande Get-Command (qui renvoie la liste des commandes disponibles) est envoyée dans un fichier texte dans C:\temp.

Exemple 2 :

PS C:\> Get-Command | foreach {write-host "$_ est une commande de PowerShell"}

   Dans cet exemple la sortie de Get-Command va être envoyée à l’instruction Foreach qui va traiter chaque élément en affichant son nom suivi du texte « est une commande de PowerShell ». 

Exemple 3 :

PS C:\> Get-Command | Out-null

Out-null est une commande un peu spéciale dans la mesure où elle supprime immédiatement toute entrée qu'elle reçoit. Donc ici la sortie de la commande n’est pas affichée.

 

Passez à la vitesse supérieure avec les objets

Maintenant que vous savez tout sur les objets, ce paragraphe va vous permettre d’optimiser l’utilisation de vos objets, car même s’il est intéressant de disposer d’un petit script, sans aucun doute très pratique, il est encore plus intéressant de transformer ce script en une ligne de commande et pourquoi pas d’en faire un alias.

Cependant je suis désolé de vous l’apprendre mais il n’y a pas vraiment de méthode pour réduire votre script, l’expérience et la pratique feront de vous un excellent power-scripteur.

Voici quelques exemples pour ne pas que vous repartiez les mains vides :

 Exemple Nº1 

PS C:\> Get-Command | Foreach {Get-Help $_ -detailed |Out-File -FilePath C:\temp\$_.txt –Encoding ASCII} 

En détail:

1ère instruction : Get-Command on récupère la liste des commandes PowerShell

2èmeinstruction : Foreach {Get-Help $_ -detailed pour chaque élément on affiche l’aide détaillée

3èmeinstruction : Out-File -FilePath C:\temp\$_.txt –Encoding ASCII} on envoie le résultat de la commande précédente dans un fichier texte portant le nom de l’élément. 

 

Résultat : Pour chaque commande PowerShell, on extrait l’aide associée (au format détaillé) et on l’envoie dans un fichier texte portant le nom de la commande. 

 

Exemple N°2   

PS C:\> Get-ChildItem C:\temp | ForEach-Object {$_.Get_extension().toLower()} | Sort-Object | Get-Unique| Out-File –FilePath C:\temp\extensions.txt -Encoding ASCII

 

Voilà de quoi vous mettre en jambe, cinq instructions sur une ligne le tout passant par des pipelines. 

En détail : 

1ère instruction : Get-ChildItem C:\temp on va lister tout les éléments du répertoire C:\temp

2èmeinstruction : ForEach-Object {$_.Get_extension().toLower()} pour chaque élément on va afficher son extension

3èmeinstruction : Sort-Object on va trier les éléments

4èmeinstruction : Get-Unique on supprime les occurrences en doublon

5èmeinstruction : Out-File –FilePath C:\temp\extensions.txt -Encoding ASCII on envoie le tout dans un fichier texte en mode ASCII.

 

Résultat : cette ligne de commande affiche dans un fichier texte les différentes extensions que l’on peut trouver dans le répertoire C:\temp.

Dernière mise à jour : ( 29-12-2006 )
 
© 2017 PowerShell-Scripting.com