mercredi 17 octobre 2012

Powershell - La base des bases


Salut à tous,

Après un long moment d'absence, je suis de retour.
Suite à un sujet donné au boulot, je me lance dans la réalisation d'articles sur un nouveau sujet : Powershell.
On m'a demandé de réaliser un script qui configure de façon automatique une machine (hostname, workgroup, users, services activés, ....)

Donc voici le premier billet sur le sujet qui va porter sur la base des bases de Powershell.

Historique rapide et téléchargement
Alors Powershell, anciennement MSH (Microsoft Command Shell est un langage de script fondé sur la programmation objet et une interface en ligne de commande.
Il est nativement présent sur Windows 7 et Windows Server 2008. Pour pouvoir l’utiliser sur XP, Vista ou Microsoft Server 2003, il vous faudra aller le télécharger grâce au lien suivant :
  • ·         Module d'installation localisé Windows PowerShell 1.0 pour Windows XP (KB926140) :


  • ·         Module d'installation Windows PowerShell 1.0 pour Windows Vista (KB928439) :


  • ·         Module d'installation localisé Windows PowerShell 1.0 pour Windows Server 2003 (KB926140) :


Démarrage de la console
Une fois que vous avez installé Powershell, vous avez alors plusieurs méthodes pour ouvrir la console :
  1.           Se rendre dans le menu Démarrer => Tous les programmes => Windows Powershell
  2.      Appuyer sur les touches (Windows) + (R) pour ouvrir une fenêtre Exécuter et taper powershell.

On verra alors apparaître une console qui ressemble à ceci :

Nos premiers pas dans la console
Pour ceux qui connaissent le DOS, pas de soucis car les commandes du DOS sont reprises dans Powershell. Après il va falloir apprendre certaines cmdlets (c’est le nom des commandes Powershell). Une cmdlet a une structure bien définie : Verbe-nom.
Je vous donnerai d’autres explications sur les cmdlets un peu plus tard.
Tous cela pour vous dire que si vous tapez un ‘dir’ dans une console Powershell, vous obtiendrez la liste des répertoires (au niveau de l’arborescence où vous êtes) avec la date de dernière modification du répertoire et les droits qui sont mis en place sur le répertoire.
Si on essaie de taper une cmdlet comme par exemple ‘Get-Process’ (donne la liste des processus en cours), on obtiendra ceci :

Il y a certaines commandes qu’il est indispensable de connaître comme par exemple ‘cls’ qui permet d’effacer le contenu de la fenêtre Powershell ou alors la commande ‘exit’ qui ferme la console.
La dernière commande indispensable est la commande ‘help’ équivalente à ‘Get-Help’ qui est l’aide de la console Powershell.

Les raccourcis clavier
Certains raccourcis clavier peuvent vous faire gagner du temps. Sauf erreur de ma part, ses raccourcis existaient déjà sous une console DOS.
Si je vous dis quels vont être les effets d’appui sur les touches flèches haut et flèches bas ? Une idée ???  Si vous répondez que ses deux touches permettent de naviguer dans la commande qui ont été tapé durant l’ouverture de la console Powershell, je dis que vous avez entièrement raison. Mais savez-vous que les touches (F5) et (F8) permettent de faire la même chose. La touche (F7) permet d’afficher un cadre avec la liste des commandes et un numéro pour chaque commande. Si vous voulez réutiliser une de ses commandes, vous pouvez alors appuyer sur (F9) et taper le numéro de la commande.

L’auto-complétion
Le complètement ou complètement automatique, ou encore par anglicisme complétion ou auto-complétion, est une fonctionnalité informatique permettant à l'utilisateur de limiter la quantité d'informations qu'il saisit avec son clavier, en se voyant proposer un complément qui pourrait convenir à la chaîne de caractères qu'il a commencé à taper.
Pour tout informaticien qui est censé être fainéant, c’est parfait. Vous commencez à taper une commande, vous appuyez sur (Tab) et Powershell vous fait des proprositions de commande.

Exemple :
Si vous tapez ‘Get-‘ et que vous appuyer une première fois sur (Tab), Powershell vous proposera ‘Get-Acl’. Un second appui sur la touche (Tab) et Powershell passera à la proprosition suivante, soit : ‘Get-Alias’, ….

Le piping
Si certains d’entre vous on déjà touché au shell sous Linux, ils doivent connaître le terme de pipe.
Si j’essaie dans donner une définition la plus simplifiée possible, c’est quand vous avez plusieurs commandes qui se suivent. Celle-ci sont séparées par un pipe ( | ).

Exemple :
Commande 1 | Commande 2 | Commande 3
Le résultat de la commande 1 est la source de départ avant l’exécution de la commande 2. Le but étant au fur et à mesure des commandes de restreindre le nombre de résultats.

Exemple 2 :
L’utilisation du pipe peut également permettre de faire un ‘tri’ dans l’affichage.
Si on reprend une des commandes tapées ci-dessous (et qui retourne pas mal de résultat) comme ‘Get-Process’ (qui, pour rappel, liste les processus en exécution sur la machine), il se peut que votre fenêtre Powershell ne soit pas assez grande pour afficher l’ensemble des processus dans la fenêtre. Vous devrez alors jouer avec la barre de défilement verticale (ce n’est pas très pratique). Une solution a ce problème peut-être de taper un ‘| more’ après notre cmdlet. On verra alors  que la fenêtre powershell affiche les premiers résultats et que pour avoir le reste, il faut presser la touche (Espace).
‘Get-Process’ (sans pipe pour l’affichage)

‘Get-Process | more’

La redirection
Le symbole pour la redirection est (>). Le but généralement est de redirigé le résultat d’une commande vers un fichier. Le but étant de garder une trace de son travail. Bien sûr ce n’est pas l’unique usage de la redirection.

Exemple :
La première commande envoie le résultat du ‘Get-Process’ dans un fichier situé à la racine et qui s’appelle ‘processus.txt’. La deuxième commande permet de lancer le fichier ‘processus.txt’ : un bloc note va donc s’ouvrir avec le résultat de ma commande à l’intérieur.

Affichage du fichier ‘processus.txt’

Voila pour la base des bases. J’espère avoir été suffisamment clair dans mes explications. Surtout si vous avez des questions, n’hésitez pas à laisser des messages auxquels je répondrai.
A très vite pour la suite sur Powershell.

Virtual87