Outils pour utilisateurs

Outils du site


dev:powershell:parametres

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
dev:powershell:parametres [2023/06/30 16:48] yoanndev:powershell:parametres [2023/08/27 19:50] (Version actuelle) yoann
Ligne 2: Ligne 2:
  
  
-====== PowerShell : Utiliser des paramètres ======+====== PowerShell : Utiliser des paramètres nommés ======
  
-Pour plus de flexibilité, les scripts peuvent accepter des paramètres.+Pour plus de flexibilité, les scripts et les fonctions peuvent accepter des paramètres nommés.
  
-On déclare les paramètres en début de script avec le bloc **''Param()''**:+On déclare les paramètres nommés en début de script ou de fonction avec le bloc **''Param()''**:
 <code powershell> <code powershell>
 +# Début de script aScript.ps1
 Param ( Param (
   $FirstParam,   $FirstParam,
Ligne 13: Ligne 14:
   $ThirdParam   $ThirdParam
 ) )
 +</code>
 +
 +<code powershell>
 +function aFunctionName {
 +  Param(
 +    $FirstParam,
 +    $SecondParam,
 +    $ThirdParam
 +  )
 +  BEGIN{}
 +  PROCESS{}
 +  END{}
 +}
 +
 </code> </code>
  
 Avec des paramètres déclarés ainsi, l'utilisateur peut appeler le script et bénéficier de l'autocomplétion sur les options de la même manière que pour les cmdlets. Avec des paramètres déclarés ainsi, l'utilisateur peut appeler le script et bénéficier de l'autocomplétion sur les options de la même manière que pour les cmdlets.
 +
 +<code powershell>
 +# Appel du script avec les paramètres nommés :
 +aScript.ps1 -FirstParam aValue1 -SecondParam aValue2 -ThirdParam aValue3
 +
 +# On appelle une fonction de la même manière
 +aFunctionName -FirstParam aValue1 -SecondParam aValue2 -ThirdParam aValue3
 +</code>
  
 S'il n'y a pas de bloc **Param()** en début de script les données fournies au script à l’exécution sont tout de même accessible dans la variable **$args**. S'il n'y a pas de bloc **Param()** en début de script les données fournies au script à l’exécution sont tout de même accessible dans la variable **$args**.
Ligne 74: Ligne 97:
 ) )
 </code> </code>
 +
 +===== Utiliser les paramètres courants =====
 +
 +Les fonctions nommées peuvent hériter des paramètres courants comme **-Verbose** ou **-Debug**. Pour une informations exhaustive confère [[https://learn.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_commonparameters?view=powershell-7.3|A propos des paramètres courants (Microsoft Learn)]].
 +
 +Dans l'exemple ci-dessous on exploite le paramètre courant **-Verbose** dans une fonction nommée :
 +<code powershell>
 +function aFonctionName {
 +  Param(
 +    # Nécessaire pour lier les paramètres courants
 +    [CmdletBinding()]
 +  )
 + 
 +  # Affiche un message avec la valeur de l'option Verbose si elle est positionnée, false sinon.
 +   Write-Host "`$Verbose = $( if ( $PSBoundParameters.ContainsKey('Verbose') ){$PSBoundParameters['Verbose']}else{$false} )"
 +}
 +</code>
 +
 +L'avantage de ce code est qu'il a un comportement attendu avec les appels suivants :
 +<code powershell>
 +aFonctionName
 +$Verbose = False
 +
 +aFonctionName -Verbose
 +$Verbose = True
 +
 +aFonctionName -Verbose:$false
 +$Verbose = False
 +
 +aFonctionName  -Verbose:$true
 +$Verbose = True
 +</code>
 +
 +
 +Les variables ''$PSCmdlet.MyInvocation.BoundParameters'' et ''$PSBoundParameters'' référencent le même objet : on peut les utiliser indifféremment :
 +
 +<code powershell>
 +# Tester la présence du paramètre courant Verbose
 +$PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent
 +$PSCmdlet.MyInvocation.BoundParameters.ContainsKey('Verbose')
 +
 +$PSBoundParameters["Verbose"].IsPresent
 +$PSBoundParameters.ContainsKey('Verbose')
 +
 +
 +# Accéder à la valeur du paramètre courant Verbose
 +$PSCmdlet.MyInvocation.BoundParameters['Verbose']
 +$PSBoundParameters['Verbose']
 +$PSBoundParameters.Item('Verbose')
 +$PSBoundParameters.verbose
 +</code>
 +
  
 ===== Références ===== ===== Références =====
dev/powershell/parametres.1688143725.txt.gz · Dernière modification : 2023/06/30 16:48 de yoann