Outils pour utilisateurs

Outils du site


dev:powershell:structures_de_controle

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
dev:powershell:structures_de_controle [2023/06/21 16:39] – créée yoanndev:powershell:structures_de_controle [2023/06/23 12:07] (Version actuelle) yoann
Ligne 1: Ligne 1:
 {{tag>dev powershell}} {{tag>dev powershell}}
- 
-:TODO: 
  
 ====== PowerShell : Les structures de contrôle ====== ====== PowerShell : Les structures de contrôle ======
  
 +===== Les boucles =====
 +
 +==== ForEach ====
 +
 +La boucle **ForEach** permet de traiter chaque éléments d'un tableau ou plus généralement d'un objet itérable :
 +
 +<code powershell>
 +ForEach ($user in $users) {
 +     Set-ADUser $user -Department "Marketing"
 +}
 +</code>
 +
 +<note>
 +A partir de PowerShell 7 une cmdlet **ForEach-Object** permet de paralléliser les traitements accélérant significativement le temps d'exécution. La commande précédente peut alors s'écrire :
 +<code powershell>
 +$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
 +</code>
 +</note>
 +
 +==== For ====
 +
 +La boucle **For** est utilisée dans les cas ou l'on souhaite répéter un nombre déterminé d'instructions. 
 +
 +<code powershell>
 +For($i=1; $i -le 10; $i++) {
 +   Write-Host "Creating User $i"
 +}
 +</code>
 +
 +==== Do While ====
 +
 +Re-exécute un bloc d'instructions tant que la condition évaluée reste vraie
 +
 +<code powershell>
 +# Repose la question tant que l'utilisateur
 +# ne répond pas Oui
 +Do {
 +        $userChoise = Read-Host -Prompt "Oui ou Non"
 +} While ($userChoise -ne "Oui")
 +</code>
 +
 +==== Do Until ====
 +
 +Inversement, la structure de boucle Do...Until rejouera le boc d'instruction jusqu'à ce que la condi
 +
 +<code powershell>
 +# Repose la question tant que l'utilisateur ne répond
 +# pas Oui
 +Do {
 +        $userChoise = Read-Host -Prompt "Oui ou Non"
 +} Until ($userChoise -eq "Oui")
 +</code>
 +
 +==== While ====
 +
 +La boucle While commence par évaluer la condition avant l'exécution du bloc d'instructions. Le bonc peut donc s’exécuter 0 ou plusieurs fois contrairement aux structures Do..While|Until qui exécutent le bloc 1 ou plusieurs fois.
 +
 +<code powershell>
 +$userChoise = 'Oui'
 +
 +# La variable est initialisée à 'oui'
 +# le bloc ci-dessous ne sera pas exécuté
 +While ( $userChoise -eq 'Non') {
 +        $userChoise = Read-Host -Prompt "Oui ou Non"
 +}
 +
 +</code>
 +
 +===== Break et Continue ====
 +
 +Les instructions **Break** et **Continue** permettent de modifier le comportement par défaut des boucles :
 +  * **Continue** interrompt l'itération courante de la boucle et continue immédiatement sur l'itération suivante de la boucle ;
 +  * **Break** arrête complètement le traitement de la boucle.
 +
 +Ces instructions peuvent être utilisées par exemple pour interrompre les traitements lorsque des données sont considérées invalides. 
 +
 +<code powershell>
 +# Applique des traitements sur l'ensemble 
 +# des utilisateurs du tableau sauf l'administrateur
 +
 +ForEach ($user in $users) {
 +   If ($user.Name -eq "Administrator") {Continue}
 +   Write-Host "Modify user object"
 +}
 +</code>
 +
 +
 +===== Les branchements =====
 +
 +==== If ====
 +
 +<code powershell>
 +If ($freeSpace -le 5GB) {
 +   Write-Host "Free disk space is less than 5 GB"
 +} ElseIf ($freeSpace -le 10GB) {
 +   Write-Host "Free disk space is less than 10 GB"
 +} Else {
 +   Write-Host "Free disk space is more than 10 GB"
 +}
 +</code>
 +
 +==== Switch ====
 +
 +Pour un branchement conditionnel à choix multiples, il peut être plus lisible d'utiliser l'instruction **Switch** plutôt qu'une instruction If comprenant plusieurs sections **ElseIf** ou des **If** imbriqués.
 +
 +**Switch** compare la valeur fournie a un ensemble de valeurs attendues. Un bloc d'instructions est associé et exécuté pour chaque alternative
 +
 +<code powershell>
 +Switch ($choice) {
 +   1 { Write-Host "You selected menu item 1" }
 +   2 { Write-Host "You selected menu item 2" }
 +   3 { Write-Host "You selected menu item 3" }
 +   Default { Write-Host "You did not select a valid option" }
 +}
 +</code>
 +
 +**Switch** possède les options **-Wilcard**, **-Like** et **-Regex** permettant d'utiliser des méta-caractères pour l'évaluation sur les chaînes de caractères. Cette fonctionnalité a un comportement spécifique car plusieurs correspondances sont alors possibles : dans ce cas, les blocs de script pour tous les critères correspondants sont exécutés.
 +
 +<code powershell>
 +Switch -WildCard ($ip) {
 +   "10.*" { Write-Host "This computer is on the internal network" }
 +   "10.1.*" { Write-Host "This computer is in London" }
 +   "10.2.*" { Write-Host "This computer is in Vancouver" }
 +   Default { Write-Host "This computer is not on the internal network" }
 + }
 +</code>
  
 +Seconde remarque si la variable a évaluer est un tableau, chaque élément sera évaluer.
  
 ===== Références ===== ===== Références =====
  
   * https://learn.microsoft.com/fr-fr/training/modules/work-script-constructs-windows-powershell/   * https://learn.microsoft.com/fr-fr/training/modules/work-script-constructs-windows-powershell/
dev/powershell/structures_de_controle.1687365590.txt.gz · Dernière modification : 2023/06/21 16:39 de yoann