Question [Tutoriel] Les fonctions avancées sous PS V2

Plus d'informations
il y a 16 ans 1 mois #6137 par Laurent Dardenne
Une étude des fonctions avancées sous PS V2 :

La version 2 de PowerShell apporte de nombreuses évolutions, l'une concerne l'écriture de cmdlet en code natif à l'aide de fonctions dites avancées utilisant différents types d'attributs. Dans le texte suivant je vous propose d'étudier la création de cmdlets sans utiliser de langage compilé dotnet.


Une bonne connaissance des principes de base de PowerShell, notamment celui du pipeline, du fonctionnement des cmdlets et des classes dotnet, facilitera la lecture de ce tutoriel qui est tout de même orienté développeur. Difficile de faire autrement sur un tel sujet, mais cela reste un tutoriel sur le scripting avancé sous PowerShell.

Accéder au tutoriel.

QUELLES SONT LES AVANCEES ?.............................................................................................................4
1.1 PRINCIPE D’UN ATTRIBUT...........................................................................................................................5
1.2 LES TYPES D’ATTRIBUT DE PARAMETRE ......................................................................................................5
1.2.1 Attribut Alias.........................................................................................................................................5
1.2.2 Attributs de validation de paramètres....................................................................................................6
1.2.3 Attribut Parameter................................................................................................................................6
1.3 DECLARER UN ATTRIBUT............................................................................................................................6
2 LIAISON DE PARAMETRES .........................................................................................................................8
2.1 CONVENTION DE NOMMAGE DE PARAMETRES...........................................................................................10
3 LA GESTION DU PIPELINE ........................................................................................................................11
3.1 DIFFERENCES ENTRE LA VERSION 1 ET LA VERSION 2................................................................................12
4 LES ARGUMENTS DE L’ATTRIBUT PARAMETER ..............................................................................16
4.1 MANDATORY............................................................................................................................................16
4.2 POSITION..................................................................................................................................................16
4.3 HELPMESSAGE.........................................................................................................................................17
4.4 VALUEFROMPIPELINE..............................................................................................................................17
4.5 VALUEFROMPIPELINEBYPROPERTYNAME ...............................................................................................17
4.6 VALUEFROMREMAININGARGUMENTS ......................................................................................................21
4.7 PARAMETERSETNAME ..............................................................................................................................21
4.7.1 Validité des jeux de paramètres...........................................................................................................23
5 LES ATTRIBUTS DE VALIDATION...........................................................................................................26
5.1 ALLOWNULL............................................................................................................................................28
5.2 VALIDATENOTNULL ................................................................................................................................28
5.3 ALLOWEMPTYSTRING..............................................................................................................................28
5.4 VALIDATENOTNULLOREMPTY................................................................................................................29
5.5 ALLOWEMPTYCOLLECTION ......................................................................................................................29
5.6 VALIDATECOUNT.....................................................................................................................................29
5.7 VALIDATELENGTH ...................................................................................................................................29
5.8 VALIDATEPATTERN..................................................................................................................................30
5.9 VALIDATERANGE.....................................................................................................................................31
5.10 VALIDATESET ..........................................................................................................................................31
5.11 VALIDATESCRIPT .....................................................................................................................................31
5.11.1 Création de règles de validation .....................................................................................................33
5.11.2 Usage de fonction de validation dans un module............................................................................34
5.12 DIFFERENCES DE COMPORTEMENT ENTRE UNE FONCTION AVANCEE ET UN CMDLET .................................34
6 CREATION DE PARAMETRES DYNAMIQUES ......................................................................................35
7 LA VARIABLE AUTOMATIQUE PSCMDLET.........................................................................................40
7.1 GESTION DES EXCEPTIONS........................................................................................................................42
7.2 LA VARIABLE ERRORVIEW.......................................................................................................................43
7.3 A PROPOS DU BLOC END............................................................................................................................44
8 LES ARGUMENTS DE L’ATTRIBUT CMDLETBINDING.....................................................................44
8.1 SUPPORTSSHOULDPROCESS ......................................................................................................................45
8.1.1 A propos des capacités des providers ..................................................................................................46
8.1.2 La méthode ShouldContinue................................................................................................................47
8.2 CONFIRMIMPACT......................................................................................................................................48
8.2.1 La variable $ConfirmPreference .........................................................................................................49
8.2.2 La variable $WhatIfPreference............................................................................................................50
8.3 SUPPORTSTRANSACTIONS .........................................................................................................................50
8.4 DEFAULTPARAMETERSETNAME ...............................................................................................................50
9 ACCEDER AUX DETAILS D’UNE COMMANDE.....................................................................................51
9.1 ACCEDER AUX INFORMATIONS D’UNE FONCTION ......................................................................................51
9.2 ACCEDER AUX INFORMATIONS D’UN CMDLET...........................................................................................54
9.3 ACCEDER AUX INFORMATIONS D’UN FICHIER SCRIPT ................................................................................55
9.4 ACCEDER AUX INFORMATIONS D’UN MODULE...........................................................................................55
9.5 UNE APPROCHE DU SCRIPTING BASEE SUR DES PLUGINS ............................................................................56
10 PROXY DE CMDLET ...................................................................................................................................56
10.1 STEPPABLE PIPELINES ...............................................................................................................................58
10.1.1 Bloc Begin......................................................................................................................................58
10.1.2 Bloc Process...................................................................................................................................59
10.1.3 Bloc End.........................................................................................................................................59
10.2 GESTION DES ERREURS.............................................................................................................................60
10.3 SUPPRESSION DE PARAMETRES..................................................................................................................61
10.4 AJOUT DE PARAMETRES ............................................................................................................................61
11 SCRIPTBLOCK ET ATTRIBUTS ................................................................................................................62
12 CONSTRUIRE L’AIDE EN LIGNE..............................................................................................................63
12.1 CONSTRUIRE UN FICHIER D’AIDE LOCALISE AU FORMAT MAML ..............................................................63
13 CONCLUSION................................................................................................................................................66
14 LIENS...............................................................................................................................................................65

[edit]
Voir aussi :
connect.microsoft.com/PowerShell/feedbac...not-coerce-null-true

Message édité par: Laurent Dardenne, à: 26/02/10 21:22

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 1 mois #6141 par Arnaud Petitjean
Salut Laurent,

Beau travail, chapeau ! Je viens de télécharger ton tuto et de le parcourir rapidement, mais dès que j'ai un peu de temps je me ferais un plaisir de le lire.

Bravo!

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 1 mois #6143 par Laurent Dardenne
Bonjour Arnaud,
Arnaud écrit:

Beau travail, chapeau !

Merci.
C'est vrai que j'ai eu pas mal de travail pour le rédiger.
Arnaud écrit:

mais dès que j'ai un peu de temps je me ferais un plaisir de le lire.

C'est un sujet relativement facile, mais comme tu le dis il faut du temps pour l'étudier et pratiquer toutes les nouveautés liées à l'écriture de cmdlet en mode natif.
Si vous codiez déjà vos fonctions comme des cmdlets, usage du pipe+blocks (begin,process,end), cela ne devrait pas vous poser de problème, sinon c'est l'occasion de s'y mettre ;)

Il faut juste savoir que la gestion des confirmations,ShouldContinue, n'est pas vraiment évidente à mettre en oeuvre...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 6 jours #6378 par Arnaud Petitjean
Salut Laurent,

J'ai enfin pris le temps de te lire et j'avoue avoir perfectionné mes connaissances sur le sujet !
Vraiment très bien ton tuto.

Je viens de m'apperçevoir que tu l'avais mis à jour le 13 Mars, aurais tu quelque part un suivi des modifications afin d'être sur que je ne loupe rien car la version que j'ai lu était antérieure.

Bon travail, et merci encore !

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 5 jours #6385 par Laurent Dardenne
Bonjour Arnaud,
Arnaud écrit:

J'ai enfin pris le temps de te lire et j'avoue avoir perfectionné mes connaissances sur le sujet !

Il est fait pour ça ;)
Arnaud écrit:

Vraiment très bien ton tuto.

J'espère, il m'a demandé beaucoup de travail, pas mal de tests et de recherches.
Arnaud écrit:

aurais tu quelque part un suivi des modifications

2 points:
-Un court passage sur l'attribut [OutputType] qui n'est pas documenté,
-et un ajout sur l'utilisation de fonction de validation au sein d'un module (cf. Attribut ValidatScript).

Merci pour l'annonce :)

ps:
Dés que je trouve le temps de le finaliser, je posterai le module de validation et les fichiers de localisation (fichiers MAML Fr et Us pour l'aide, et fichiers DATA pour les messages d'erreur).

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena