====== PowerShell ====== ===== Structure de contrôle ===== \\ |Opérateurs de comparaison |[[windows:powershell:variables#operateurs_de_comparaison|Voir]] | ==== Test IF ==== * **Tester une condition** if () { } * **Tester plusieurs conditions** if () { } elseif () { } else { } * **Exemple** > $day = 3 > if ( $day -eq 0 ) { $result = 'Sunday' } > elseif ( $day -eq 1 ) { $result = 'Monday' } > elseif ( $day -eq 2 ) { $result = 'Tuesday' } > elseif ( $day -eq 3 ) { $result = 'Wednesday' } > elseif ( $day -eq 4 ) { $result = 'Thursday' } > elseif ( $day -eq 5 ) { $result = 'Friday' } > elseif ( $day -eq 6 ) { $result = 'Saturday' } PS C:\> $result Wednesday \\ ==== Test SWITCH ==== L’instruction switch vous permet de fournir une variable et une liste de valeurs possibles. Si la valeur correspond à la variable, son scriptblock est exécuté. * **Syntaxe** switch ( $var_à_tester ) { 0 { $var = } # ... 6 { $var = } default { $var = } } #_ou $var = switch ( $var_à_tester ) { 0 { } # ... 6 { } default { } } * **Exemple** > $day = 3 > switch ( $day ) > { > 0 { $result = 'Sunday' } > 1 { $result = 'Monday' } > 2 { $result = 'Tuesday' } > 3 { $result = 'Wednesday' } > 4 { $result = 'Thursday' } > 5 { $result = 'Friday' } > 6 { $result = 'Saturday' } > } PS C:\> $result Wednesday Autre écriture possible (on affecte le résultét à la variable ''$result'' : > $result = switch ( $day ) > { > 0 { 'Sunday' } > 1 { 'Monday' } > 2 { 'Tuesday' } > 3 { 'Wednesday' } > 4 { 'Thursday' } > 5 { 'Friday' } > 6 { 'Saturday' } > } \\ ==== Boucle FOR ==== Exécute les commandes d'un bloc tant qu'une condition spécifiée prend la valeur TRUE. * **Syntaxe** for(; ; ) { } * Exemple : Incrémente la variable $i de 1 à 20 PS C:\> for($i=1; $i<21; $i++) { Write-Host $i } 1 2 3 ... 19 20 \\ ==== Boucle FOREACH ==== Commande permettant de parcourir tous les éléments d'une collection. * **Syntaxe** foreach ($<élément> in $) { } * **Parcourir un tableau** PS C:\> $planetes_array = @("Terre","Venus","Mercure","Jupiter") PS C:\> foreach ($planete in $planetes_array) { "$planete : " + $planete.Length + "lettres" } Terre : 5 lettres Venus : 5 lettres Mercure : 7 lettres Jupiter : 7 lettres * **Parcourir une collection** PS C:\> foreach ($fich in Get-ChildItem) { Write-Host $fich } PerfLogs Program Files Program Files (x86) Users Windows \\ ==== Boucle FOREACH-OBJECT ==== **ForEach-Object** est identique à ForEach, mais permet également l'usage de 3 blocs : * Un bloc **begin** exécuté une seule fois au début * Un bloc **process** exécuté à chaque entrée d'objet dans le pipeline * Un bloc **end** exécuté une seule fois à la fin __Exemple__ : Retourne les adresses MAC de type Ethernet de la machine locale PS C:\> Get-WmiObject Win32_networkAdapter | Where {$_.adapterType -match "eth"} | ForEach-Object {Write-Host "Adresse MAC" -fore green}{$_.macaddress}{Write-Host "FIN" -fore yellow} Adresse MAC EC:55:F9:84:89:A1 EC:55:F8:81:98:A7 F6:55:F9:84:89:A1 FIN \\ ---- ===== Fonctions ===== \\ ==== Structure d'une fonction ==== Function[portée:] () #_Bloc d'instructions } \\ ==== Fonctions sans argument ==== * Exemple 1 : Fonction qui démarre un PowerShell avec l'option 'Exécuter en tant qu'administrateur'. Function start-PSAdmin { Start-Process PowerShell -Verb RunAs } * Exemple 2 : Fonction qui recherche tous les fichiers ''.jpg'' dans un répertoire donné et qui ont été modifiés après la date de début. * Function Get-NewPix { $start = Get-Date -Month 1 -Day 1 -Year 2020 $allpix = Get-ChildItem -Path $env:UserProfile\*.jpg -Recurse $allpix | Where-Object {$_.LastWriteTime -gt $start} } \\ ==== Fonctions avec arguments ==== Les arguments dans les fonctions permettent le passage de variables, de valeurs. * **Cas 1** : Définir des paramètres à l'intérieur des accolades (''**param**'') Function { param ([type]$parameter1 [,[type]$parameter2 ,...]) } __Exemple__ : on récupère la variable $Size, passée en paramètre lors de l'appel à la fonction Function Get-SmallFiles { param($Size) Get-ChildItem $HOME -recurse | Where-Object {$_.Length -lt $Size -and !$_.PSIsContainer} } PS C:\> Get-SmallFiles 50 #_ou PS C:\> Get-SmallFiles -Size 50 * **Cas 2** : Définir des paramètres en dehors des accolades Function ([type]$parameter1 [,[type]$parameter2 ,...]) { } __Exemple__ : on peut réécrire la fonction ci-dessus de cette manière. Function Get-SmallFiles ( $Size ) { Get-ChildItem $HOME -recurse | Where-Object {$_.Length -lt $Size -and !$_.PSIsContainer} } * **Stockage et appel des arguments** Lorsque des arguments sont placés dans une fonction, ils sont stockés dans un tableau nommé ''**$args**''. __Exemple__ : Utilisation des arguments passés en paramètres de la fonction Function get-fic { Get-ChildItem $args[0] | Where length -gt $args[1] } PS C:\> get-fic C:\Temp 100KB #_Retourne tous les fichiers >100KB dans le répertoire C:\Temp