RUBRIQUE
    about_Functions

DESCRIPTION COURTE
    Décrit comment créer et utiliser des fonctions dans Windows PowerShell. 


DESCRIPTION LONGUE
    Une fonction est une liste d'instructions portant un nom que vous 
    affectez. Lorsque vous exécutez une fonction, vous tapez son nom. Les 
    instructions de la liste s'exécutent comme si vous les aviez tapées à 
    l'invite de commandes. 

    Tout comme les applets de commande, les fonctions peuvent avoir 
    des paramètres. Les paramètres peuvent être nommés, positionnels, 
    booléens ou dynamiques. Les paramètres de fonction peuvent être 
    lus à partir de la ligne de commande ou du pipeline. 

    Les fonctions peuvent retourner des valeurs qui peuvent être 
    affichées, affectées à des variables ou passées à d'autres 
    fonctions ou applets de commande. 

    La liste d'instructions de la fonction peut contenir différents 
    types de listes d'instructions avec les mots clés Begin, Process 
    et End. Ces listes d'instructions gèrent l'entrée provenant du 
    pipeline différemment.

    Un filtre est un type spécial de fonction qui utilise le mot clé 
    Filter. 

    Les fonctions peuvent également agir comme des applets de 
    commande. Vous pouvez créer une fonction fonctionnant exactement 
    comme une applet de commande sans utiliser la programmation C#. 
    Pour plus d'informations, consultez about_Functions_Advanced.


  Syntaxe
      Voici la syntaxe pour une fonction :

          function [<portée:>]<nom> [([type]$parameter1[,[type]$parameter2])] 
          {
              param([type]$parameter1 [,[type]$parameter2])

              dynamicparam {<liste d'instructions>}
  
              begin {<liste d'instructions>}
              process {<liste d'instructions>}
              end {<liste d'instructions>}
          }


      Une fonction inclut les éléments suivants :

          - un mot clé Function ;
          - une portée (facultatif) ;
          - un nom que vous sélectionnez ;
          - un certain nombre de paramètres nommés (facultatif) ;
          - une ou plusieurs commandes Windows PowerShell placées 
            entre accolades ({}). 


      Pour plus d'informations sur le mot clé Dynamicparam et sur les 
      paramètres dynamiques des fonctions, consultez 
      about_Functions_Advanced_Parameters.


  Fonctions simples
      Les fonctions n'ont pas à être compliquées pour être utiles. La 
      fonction suivante obtient les variables d'environnement qui 
      n'appartiennent pas au compte Système du système actuel : 

          function other_env 
          { 
             get-wmiObject win32_environment | 
                where {$_.username -ne "<Système>"}
          }

      Pour exécuter la fonction, tapez " other_env ". 

      Vous pouvez créer une boîte à outils de petites fonctions 
      utiles. Ajoutez ces fonctions à votre profil Windows 
      PowerShell, comme décrit dans about_Profiles et plus loin dans 
      cette rubrique.


  Fonctions avec paramètres
      Vous pouvez utiliser des paramètres avec les fonctions, 
      notamment des paramètres nommés, des paramètres positionnels, 
      des paramètres booléens et des paramètres dynamiques. Pour plus 
      d'informations sur les paramètres dynamiques des fonctions, 
      consultez about_Functions_Advanced_Parameters.


  Paramètres nommés
      Vous pouvez définir le nombre de paramètres nommés de votre 
      choix. Vous pouvez inclure une valeur par défaut pour les 
      paramètres nommés, comme décrit plus loin dans cette rubrique.

      Vous pouvez définir des paramètres à l'intérieur des accolades 
      à l'aide du mot clé Param, comme indiqué dans l'exemple de 
      syntaxe suivant :
    
          function <name> { 
               param ([type]$parameter1[,[type]$parameter2])
               <statement list> 
          }


      Vous pouvez également définir des paramètres à l'extérieur des 
      accolades sans le mot clé Param, comme indiqué dans l'exemple 
      de syntaxe suivant :

          function <nom> [([type]$parameter1[,[type]$parameter2])] { 
              <liste d'instructions> 
          }


      Il n'y a aucune différence entre ces deux méthodes. Utilisez la 
      méthode que vous préférez.

      Lorsque vous exécutez la fonction, la valeur que vous 
      fournissez pour un paramètre est affectée à une variable qui 
      contient le nom de paramètre. La valeur de cette variable peut 
      être utilisée dans la fonction. 

      L'exemple suivant est celui d'une fonction appelée 
      Petits_fichiers. Cette fonction comporte un paramètre $size. 
      Elle affiche tous les fichiers dont la taille est inférieure à 
      la valeur du paramètre $size et exclut les répertoires :

          function petits_fichiers {
              param ($size)
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }


      Dans la fonction, vous pouvez utiliser la variable $size, qui 
      correspond au nom défini pour le paramètre.

      Pour utiliser cette fonction, tapez la commande suivante :
 
          C:\PS> function petits_fichiers -size 50


      Vous pouvez également entrer une valeur pour un paramètre nommé 
      sans le nom de paramètre. Par exemple, la commande suivante 
      donne le même résultat qu'une commande qui nomme le paramètre Size :

          C:\PS> function petits_fichiers 50


      Pour définir une valeur par défaut pour un paramètre, tapez un 
      signe égal et la valeur après le nom de paramètre, comme 
      indiqué dans la variation suivante de l'exemple Petits_fichiers :

          function petits_fichiers ($size = 100) {
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }


      Si vous tapez " petits_fichiers " sans valeur, la fonction 
      affecte 100 à $size. Si vous fournissez une valeur, la fonction 
      utilise cette valeur.


  Paramètres positionnels
      Un paramètre positionnel est un paramètre sans nom de 
      paramètre. Windows PowerShell utilise l'ordre des valeurs de 
      paramètre pour associer chaque valeur de paramètre à un 
      paramètre de la fonction. 

      Lorsque vous utilisez des paramètres positionnels, tapez une ou 
      plusieurs valeurs après le nom de fonction. Les valeurs de paramètre 
      positionnel sont affectées à la variable tableau $args. La valeur qui 
      suit le nom de fonction est affectée à la première position dans le 
      tableau $args, $args[0]. 

      La fonction Extension suivante ajoute l'extension de nom de 
      fichier .txt à un nom de fichier que vous fournissez :

          function extension {
              $name = $args[0] + ".txt"
              $name
          }

          C:\PS> extension monFichierTexte
          monFichierTexte.txt
   
      Les fonctions peuvent accepter plusieurs paramètres 
      positionnels. L'exemple suivant affiche toutes les valeurs 
      entrées avec le nom de fonction.

          function repeat { foreach ($arg in $args) { "L'entrée est $arg" } }

          C:\PS>repeat un 
          L'entrée est un

          C:\PS> repeat un deux trois
          L'entrée est un
          L'entrée est deux 
          L'entrée est trois


      Cette fonction peut être utilisée avec tout nombre de valeurs. 
      La fonction affecte chaque valeur à une position dans le 
      tableau $args.


  Paramètres booléens
      Un paramètre booléen est un paramètre qui ne requiert pas de 
      valeur. À la place, vous tapez le nom de fonction suivi du nom 
      du paramètre booléen.

      Pour définir un paramètre booléen, spécifiez le type [switch] 
      avant le nom de paramètre, comme indiqué dans l'exemple suivant :

          function switchExample {
              param ([switch]$on)
              if ($on) { "Allumer" }
              else { "Éteindre" }
          }


      Lorsque vous tapez le paramètre booléen On après le nom de 
      fonction, la fonction affiche " Allumer ". Sans ce paramètre 
      booléen, elle affiche " Éteindre ".

          C:\PS> SwitchExample -on
          Allumer

          C:\PS> SwitchExample
          Éteindre

      Vous pouvez également affecter une valeur booléenne à un 
      paramètre booléen lorsque vous exécutez la fonction, comme 
      indiqué dans l'exemple suivant :

          C:\PS> SwitchExample -on:$true
          Allumer

          C:\PS> SwitchExample -on:$false
          Éteindre


  Redirection d'objets vers des fonctions
      Toute fonction peut accepter une entrée provenant du pipeline. 
      Vous pouvez contrôler la façon dont une fonction traite une 
      entrée provenant du pipeline à l'aide des mots clés Begin, 
      Process et End. L'exemple de syntaxe suivant affiche les trois 
      mots clés :

          function <nom> { 
              begin {<liste d'instructions>}
              process {<liste d'instructions>}
              end {<liste d'instructions>}
          }

      La liste d'instructions Begin s'exécute une fois seulement, au 
      début de la fonction. 

      La liste d'instructions Process s'exécute une fois pour chaque 
      objet du pipeline.
      Pendant l'exécution du bloc Process, chaque objet du pipeline 
      est affecté, tour à tour, à la variable automatique $_. 

      Lorsque la fonction a reçu tous les objets du pipeline, la liste 
      d'instructions End s'exécute une fois. Si aucun mot clé Begin, 
      Process ou End n'est utilisé, toutes les instructions sont 
      traitées comme une liste d'instructions End.

      La fonction suivante utilise le mot clé Process. Elle affiche 
      des exemples provenant du pipeline :

          function pipelineFunction 
          { 
              process {"La valeur est : $_"} 
          }


      Pour une démonstration de cette fonction, entrez un tableau de 
      nombres créé avec des virgules, comme indiqué dans l'exemple 
      suivant :

          C:\PS> 1,2,4 | pipelineFunction
          La valeur est : 1
          La valeur est : 2
          La valeur est : 4


      Lorsque vous utilisez une fonction dans un pipeline, les objets 
      redirigés vers la fonction sont affectés à la variable 
      automatique $input. La fonction exécute les instructions avec 
      le mot clé Begin avant que des objets ne proviennent du 
      pipeline. La fonction exécute les instructions avec le mot clé 
      End une fois que tous les objets ont été reçus du pipeline.

      L'exemple suivant affiche la variable automatique $input avec 
      les mots clés Begin et End.

          function PipelineBeginEnd 
          {
              begin {"Begin: L'entrée est $input"} 
              end {"End:   L'entrée est $input" } 
          }


      Si cette fonction est exécutée à l'aide du pipeline, elle 
      affiche les résultats suivants :

          C:\PS> 1,2,4 | PipelineBeginEnd
          Begin: L'entrée est 
          End:  L'entrée est 1 2 4


      Lorsque l'instruction Begin s'exécute, la fonction ne dispose 
      pas de l'entrée du pipeline. L'instruction End s'exécute une 
      fois que la fonction dispose des valeurs.

      Si la fonction comporte un mot clé Process, elle lit les 
      données de $input. L'exemple suivant comporte une liste 
      d'instructions Process :

          function PipelineInput
          {
              process {"Traitement : $_ " }
              end {"End:  L'entrée est : $input" } 
          } 

      Dans cet exemple, chaque objet redirigé vers la fonction est 
      envoyé à la liste d'instructions Process. Les instructions 
      Process s'exécutent sur chaque objet, l'un après l'autre. La 
      variable automatique $input est vide lorsque la fonction 
      atteint le mot clé End.

          C:\PS> 1,2,4 | PipelineInput
          Traitement : 1 
          Traitement : 2 
          Traitement : 4 
          End:  L'entrée est :


  Filtres
      Un filtre est un type de fonction qui s'exécute sur chaque 
      objet du pipeline. Un filtre ressemble à une fonction avec 
      toutes ses instructions dans un bloc Process.

      La syntaxe d'un filtre est comme suit : 

          filter [<portée:>]<nom> {<liste d'instructions>}

      Le filtre suivant prend des entrées de journal du pipeline, 
      puis affiche soit l'entrée complète, soit uniquement la partie 
      message de l'entrée :

          filter ErrorLog ([switch]$message)
          {
              if ($message) { out-host -inputobject $_.Message } 
              else { $_ }  
          }


  Portée d'une fonction
      Une fonction existe dans la portée dans laquelle elle a été créée. 

      Si une fonction fait partie d'un script, elle est disponible 
      pour les instructions au sein de ce script. Par défaut, une 
      fonction de script n'est pas disponible à l'invite de commandes. 

      Vous pouvez spécifier la portée d'une fonction. Par exemple, la 
      fonction est ajoutée à la portée globale dans l'exemple suivant : 

 
          function global:get-dependentsvs { get-service | 
             where {$_.dependentservices} }


      Lorsqu'une fonction se trouve dans la portée globale, vous 
      pouvez l'utiliser dans des scripts, dans des fonctions et sur 
      la ligne de commande.

      Les fonctions créent normalement une portée. Les éléments créés 
      dans une fonction, tels que les variables, existent uniquement 
      dans la portée de la fonction.

      Pour plus d'informations sur la portée dans Windows PowerShell, 
      consultez about_Scope.

        
  Recherche et gestion de fonctions à l'aide du lecteur Function: 
      Dans Windows PowerShell, toutes les fonctions et tous les filtres 
      sont automatiquement stockés dans le lecteur Function:. Ce lecteur 
      est exposé par le fournisseur Function de Windows PowerShell.

      Pour faire référence au lecteur Function:, tapez un signe 
      deux-points après Function, tout comme vous le feriez pour le 
      lecteur C ou D d'un ordinateur.

      La commande suivante affiche toutes les fonctions dans la 
      session active de Windows PowerShell :

          C:\PS>  dir function:


      Les commandes de la fonction sont stockées en tant que bloc de 
      script dans la propriété de définition de la fonction. Par 
      exemple, pour afficher les commandes de la fonction Help 
      fournie avec Windows PowerShell, tapez :

          (dir function:help).definition

      Pour plus d'informations sur le lecteur Function:, consultez 
      Function.


  Réutilisation de fonctions dans de nouvelles sessions
      Lorsque vous tapez une fonction à l'invite de commandes Windows 
      PowerShell, la fonction devient partie intégrante de la session 
      active. Elle est disponible jusqu'à la fin de la session. 

      Pour utiliser votre fonction dans toutes les sessions Windows 
      PowerShell, ajoutez-la à votre profil Windows PowerShell. Pour 
      plus d'informations sur les profils, consultez about_Profiles.

      Vous pouvez également enregistrer votre fonction dans un 
      fichier de script Windows PowerShell. Tapez votre fonction dans 
      un fichier texte, puis enregistrez le fichier avec l'extension 
      de nom de fichier .ps1.


  Écriture de rubriques d'aide pour les fonctions
    L'applet de commande Get-Help permet d'obtenir de l'aide sur les 
    fonctions, mais aussi sur les applets de commande, les 
    fournisseurs et les scripts. Pour obtenir de l'aide sur une 
    fonction, tapez Get-Help suivi du nom de fonction.

    Par exemple, pour obtenir de l'aide sur la fonction MyDisks, tapez :

        get-help MyDisks

    Vous pouvez écrire de l'aide pour une fonction grâce à l'une ou 
    l'autre des deux méthodes suivantes :

    --  Aide basée sur des commentaires pour les fonctions

        Crée une rubrique d'aide en utilisant des mots clés spéciaux 
        dans les commentaires. Pour créer de l'aide basée sur des 
        commentaires pour une fonction, les commentaires doivent être 
        placés au début ou à la fin du corps de la fonction ou sur 
        les lignes qui précèdent le mot clé de fonction. Pour plus 
        d'informations sur l'aide basée sur des commentaires, consultez 
        about_Comment_Based_Help.

    --  Aide XML pour les fonctions

        Crée une rubrique d'aide XML du type généralement créé pour 
        les applets de commande. L'aide XML est requise si vous 
        localisez des rubriques d'aide dans plusieurs langues. 

        Pour associer la fonction à la rubrique d'aide XML, utilisez 
        le mot clé de commentaires d'aide .ExternalHelp. Pour plus 
        d'informations sur le mot clé ExternalHelp, consultez 
        about_Comment_Based_Help. Pour plus d'informations sur l'aide XML, 
        consultez " How to Write Cmdlet Help " (page éventuellement en 
        anglais) dans MSDN.



VOIR AUSSI 
    about_Automatic_Variables 
    about_Comment_Based_Help
    about_Functions_Advanced 
    about_Functions_CmdletBindingAttribute
    about_Parameters
    about_Profiles
    about_Scopes
    about_Script_Blocks
    Function (fournisseur)





Table des matières