stsadm.net

Archives

juin 2009 (1)
avril 2009 (2)
mars 2009 (1)
février 2009 (1)
janvier 2009 (1)
novembre 2008 (3)
octobre 2008 (1)

Tag cloud

.NET, Azure, Dynamics CRM 4, Evenements, Imagine Cup, Mesh, Office, PowerShell, SharePoint, Silverlight

Documents

Liens

 Tekigo
Epsi
Microsoft Student Partner
del.icio.us
Viadeo
Facebook
Syndication


  Locations of visitors to this page

Microsoft chage the world or go home

Découvrir PowerShell en passant par cmd et sh !   

Tags: PowerShell
Technorati Tags:

Le 6 octobre dernier, c'était la rentrée des premières et deuxièmes année, j'ai eu le plaisir d'animer la première édition de l'Epsilab day pour l'EPSI Lyon. A l'occasion de cette conférence, nous avons, une nouvelle fois, présenté le laboratoire et ses activités, les projets de l'année, en cours et à venir.

J'ai ensuite fait une démonstration de PowerShell pour le présenter aux élèves.

 

Pour rendre la démo un peu moins rébarbative et axée sur Microsoft, j'ai choisi de commencer par montrer cmd puis sh et enfin PowerShell. Le but étant évidement de finir sur la partie objet absente nativement de cmd, et sh.

 

J'ai entrepris pour chaque shell de montrer comment lister les processus en cours d'exécution sur la machine et d'isoler ceux utilisant plus de 0.1% du CPU.

 

CMD et Pslist.exe

Nativement cmd ne permet pas de lister les processus de la machine. Heureusement, Sysinternal a développé un petit outil permettant quelques opérations sur les processus. Bien sûr, cmd ne gère pas non plus le pipeline. On peut donc difficilement réaliser l'opération sur une ligne.

image

J'ai choisi de rediriger la sortie standard de la commande dans un fichier texte pour pouvoir ensuite la parser avec une boucle for. Les options skip et tokens permettent d'ignorer les informations inutiles du fichier. Dans la boucle, on fait afficher juste les informations des processus dont le Pid est supérieur à 1000 (pas d'info cpu avec PSList.exe :'( ).

 

 

 

Un traitement lourd pour une petite opération. De plus, il faudrait encore effectuer un autre traitement pour obtenir uniquement les informations qui nous intéresseraient, dans le but de les utiliser par la suite.

 

Sh et Awk

Dans sh, on peut utiliser la commande ps pour lister les processus.

image

L'option u permet d'avoir plus d'informations et x permet de lister tous les processus, pas seulement ceux s'exécutant dans le shell courant.

 

Grâce à  Awk, on va pouvoir isoler les informations qui nous intéressent depuis un flux texte formaté. Ici, chaque ligne décrit un processus et les informations sont séparées par des espaces ce qui va nous faciliter la tâche.

image

On peut écrire une seule ligne car cela fait "belle lurette" que sh gère le pipeline. On va donc demandé à awk d'extraire du retour de la commande ps ux, les lignes dont la valeur de la troisième colonne est supérieur à 0.1; et lui demander d'afficher la troisième et la onzième colonne uniquement.

Ainsi on obtient un joli formatage avec le nom du processus et sa consommation cpu. En manipulant awk encore un peu plus, on peut obtenir exactement ce que l'on veut en une seule ligne de commande. Seul désavantage, cela reste toujours du texte et donc difficilement exploitable par un autre programme.

 

PowerShell, un shell objet !

Le principal avantage de PowerShell réside dans le fait que l'intégralité du shell est objet. En effet, contrairement à cmd ou à un shell unix, le retour d'une commande est un objet. Son traitement va donc être beaucoup plus simple. Démonstration...

image

Ps (alias de get-process, qui réjouira les utilisateurs de Linux) permet de lister, avec un certain nombre d'informations, les processus s'executant sur la machine. L'implémentation de la commande get-member dans PowerShell, qui a pour fonction de lister les attributs d'un objet, montre que celui-ci supporte l'objet.

Si on passe la commande get-member à ps, on s'aperçoit immédiatement que le résultat de cette commande est une liste d'objets de type System.Diagnostics.Process.

On peut aller encore plus loin en effectuant, comme pour sh, la recherche des processus consommant plus de 0.1% du CPU.

image

La commande where permet de restreindre la sortie de la commande ps. Ainsi, on va chercher dans son résultat, c'est à dire dans la liste des processus, tous ceux dont la propriété CPU est supérieur à 0.1.

Il devient donc très simple de traiter le résultat d'une commande. De plus, lorsque vous réalisez un script, vous pouvez lui faire retourner des objets plutôt que du texte, comme habituellement. Ainsi les futurs traitements seront beaucoup plus aisés.

image

On peut aller encore beaucoup plus loin avec PowerShell car celui-ci intègre le Framework .NET.

Ainsi, en quelques lignes, on peut instancier une Winform...

C'est un exemple inutile (donc indispensable) mais révélateur de la puissance de PowerShell !

 

 

 

En Conclusion

Avant PowerShell, pour écrire des scripts systèmes un peu complexe, il fallait bien souvent faire appel à des langages un peu plus robustes que la ligne de commande. Et même si PowerShell ne remplacera pas des langages comme VBScript, Python ou Ruby, il permettra de faciliter la vie des administrateurs systèmes, sous Windows, qui voudront ou pourront franchir le cap...

Adieu cmd !

 

 

Un webcast de cette démo sera bientôt en ligne sur mon Blog.

techsmith J'ai réalisé les captures d'écran de cet article avec SnagIt.

 
Ecrit par  SD-9899\greg  le  04/11/2008
1  Commentaire  |  Url de Trackback  | 0  Liens vers ce message | Marquez ce billet avec:        
 
Failed to render control: L’opération sollicitée est interdite car elle dépasse le seuil d’affichage des listes appliqué par l’administrateur.
Failed to render control: L’opération sollicitée est interdite car elle dépasse le seuil d’affichage des listes appliqué par l’administrateur.

Nom *:
URL:
Email:
Commentaires: