Introduction au PowerShell
Contents
1 Introduction
1.1 Presentation de PowerShell
Vous vous demandez certainement en quoi Powershell va-t-il bien vous servir dans la mesure où vous avez appris jusque là à vous en passer.
Pour pallier à la pauvreté des commandes fournies par l’environnement « cmd.exe » (héritage du MS-DOS), la plupart des administrateurs système ont été obligés de se tourner vers des « simili » langages de programmation tels que Perl, KixStart ou VBScript, pour réaliser des tâches simples.
Microsoft va-t-il réussir le pari de réconcilier les administrateurs de ses produits avec un environnement de lignes de commandes (ou shell) ? Pari qui n'est pas gagné dans la mesure où les utilisateurs Windows ont une culture plus graphique que ligne de commande. Ceci étant, l'interface graphique montre vite ses limites dès lors qu'il s'agit d'effectuer un grand nombre d'actions répétitives. Par conséquent pour réaliser ces tâches, il n'y pas d'autre alternative que celle de se tourner vers le scripting et donc vers le PowerShell...
J’en vois parmi vous quelques uns se gausser derrière leur écran. Ceux là se disent que Unix fait cela très bien depuis toujours et que Microsoft n’a rien inventé ! Et bien ces personnes là n’ont qu’à moitié tort. Effectivement Microsoft aurait pu y penser plus tôt, mais Microsoft ne s’est pas contenté de faire aussi bien que les shells Unix, il a essayé de faire beaucoup mieux. Arretons tout de suite toute polémique, l’objet de cet article n’est pas de comparer les shells Unix à PowerShell, mais bien d’essayer de comprendre ce qu’apporte réellement PowerShell.
1.2 Nouveautés
Les puristes ou « pro-Microsoft » pourraient en faire une liste interminable, mais je vais vous donner ma perception des choses, celle d’un administrateur système confirmé.
Voici donc selon moi les avancées les plus importantes :
- PowerShell est orienté objet
- PowerShell donne accès aux objets .Net
- PowerShell apporte une richesse de commandes exceptionnelle
- PowerShell offre une cohérence des commandes et des paramètres associés
- PowerShell offre une aide sur les commandes digne de ce nom
- PowerShell est facile à apprendre
1.2.1 Orientation objet de PowerShell
Dans un environnement traditionnel, l’exécution de chaque commande retourne du texte. Prenons par exemple la commande « DIR ». Celle-ci fournit en retour une liste textuelle de fichiers et de répertoires. En PowerShell, l’équivalent de cette commande se nomme « Get-Childitem ». Bien que son exécution retourne à l’écran à peu près la même chose que la commande « DIR », elle renvoie en réalité à l’écran une liste d’objets. Ces objets sont la plupart du temps de type fichier ou répertoire, mais ils peuvent aussi être de type clé de registre. Vous découvrirez en fait que la plupart des commandes PowerShell sont génériques.
D’autre part lorsque vous utilisez le |« pipe » pour passer le résultat d’une commande à une autre commande. Par exemple : « dir | more ». En Powershell vous passez des objets complets au lieu de passer du texte.
Vous ne comprenez peut-être pas la subtilité pour l’instant, mais vous découvrirez que cela est l’une des grandes forces de PowerShell.
Ainsi pour continuer l’exemple précédent, vous pourriez avoir envoie d’obtenir uniquement la taille d’un fichier. Comment faire ceci avec « l'invite de commandes et la commande dir» ?
Allez, on essaie...
C:\TEMP> Dir monfichier.txt Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est 78D5-739D Répertoire de C:\TEMP 28/11/2006 13:00 82 944 monfichier.txt 1 fichier(s) 82 944 octets 0 Rép(s) 3 140 132 864 octets libres
Pas évident maintenant de ne récupérer que la taille du fichier. Il va falloir compter le nombre de lignes et de caractères pour découper la chaine et enfin espérer obtenir en la taille en passant cette commande via le pipe à une autre commande. Fatistidieux !
Et en VBScript ? C’est possible mais en plusieurs lignes de code.
Et maintenant en PowerShell ?
PS C:\TEMP> $b = Get-ChildItem monfichier.txt; $b.length
De la même manière nous pourrions très facilement obtenir la date de création du fichier ou la date de dernier accès avec les commandes suivantes :
$b = Get-ChildItem monfichier.txt; $b.CreationTime $b = Get-ChildItem monfichier.txt; $b.LastAccessTime
1.2.2 La puissance de .Net
Toutes les commandes PowerShell ont été écrites en s’appuyant sur les classes d’objet .Net alors que de prime on aurait pu croire qu’il s’agissait de WMI. Ceci permet 2 choses : la première, vous avez accès à l’intégralité des classes du framework .Net (ce qui offre des fonctionnalités étendues par rapport à WMI) et la seconde, si vous êtes familiers avec le développement .Net, il vous sera d’autant plus facile d’apprendre le PowerShell (en inversement bien sur !).
N'oublions pas que « qui peut le plus, peut le moins », donc pour ne pas faillir à cette devise PowerShell est également capable de faire appel à des objets WSH, COM, et WMI en plus des objets .Net.
1.2.3 La richesse des commandes
PowerShell comprend un jeu de près de 130 commandes alors que CMD n'en a que 70. Vous la découvrirez à travers l’article d’après consacré aux commandes.
1.2.4 La cohérence des commandes et de leurs paramètres
Toutes les commandes font partie d’une même classe d’objet. Elles héritent donc tout naturellement des mêmes paramètres. Ainsi si vous maîtrisez les paramètres d’une commande, vous les maîtrisez quasiment pour toutes les autre
1.2.5 L’aide sur les commandes
PowerShell possède une aide intégrée très complète. Celle-ci possède 3 niveaux de détails. Le premier s’obtient en demandant de l’aide sans spécifier de paramètres comme :
PS C:\> Get-Help Get-ChildItem
Le second s’obtient en ajoutant le paramètre « -detailed » et le dernier avec le paramètre « -full ». De plus l’aide est français alors pourquoi s’en priver !?
Vous pouvez également obtenir de l’aide sur un sujet bien précis, par exemple sur l’utilisation du pipe. Pour ce faire, utilisez la commande suivante :
PS C:\> Get-Help about_pipeline
Pour obtenir la liste des sujets de l’aide, tapez la commande :
PS C:\> Get-Help about*