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édentes Révision précédente
Prochaine révision
Révision précédente
powershell_base1 [2020/02/17 16:27] – [Switch] nekanpowershell_base1 [2021/07/22 08:47] (Version actuelle) – [ForEach-Object] nekan
Ligne 1: Ligne 1:
-~~CLOSETOC~~ 
 ====== Les bases de Powershell - 1ère partie ====== ====== Les bases de Powershell - 1ère partie ======
 +<label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/02/20 20:43//
  
 Je vais juste récapituler ici certaines bases très utiles dans la plupart des scripts. Je vais juste récapituler ici certaines bases très utiles dans la plupart des scripts.
Ligne 23: Ligne 23:
 $true $true
 </sxh> | </sxh> |
-|  ''-gt''  |  supérieur à  |Renvoie ''$true'' si la première variable est strictement supérieur à la seconde  |<sxh powershell>2 -gt 1+|  ''-gt''  |  supérieur à  |Renvoie ''$true'' si la première variable est strictement supérieure à la seconde  |<sxh powershell>2 -gt 1
 $true $true
 2 -gt 2 2 -gt 2
 $false $false
 </sxh>| </sxh>|
-|  ''-ge''  |  supérieur ou égal à  |Renvoie ''$true'' si la première variable est supérieur ou égal à la seconde  |<sxh powershell>2 -ge 1+|  ''-ge''  |  supérieur ou égal à  |Renvoie ''$true'' si la première variable est supérieure ou égale à la seconde  |<sxh powershell>2 -ge 1
 $true $true
 2 -ge 2 2 -ge 2
 $true $true
 </sxh>| </sxh>|
-|  ''-lt''  |  inférieur à  |Renvoie ''$true'' si la première variable est strictement inférieur à la seconde  |<sxh powershell>1 -lt 2+|  ''-lt''  |  inférieur à  |Renvoie ''$true'' si la première variable est strictement inférieure à la seconde  |<sxh powershell>1 -lt 2
 $true $true
 2 -lt 2 2 -lt 2
 $false $false
 </sxh>| </sxh>|
-|  ''-ge''  |  inférieur ou égal à  |Renvoie ''$true'' si la première variable est inférieur ou égal à la seconde  |<sxh powershell>1 -le 2+|  ''-le''  |  inférieur ou égal à  |Renvoie ''$true'' si la première variable est inférieure ou égale à la seconde  |<sxh powershell>1 -le 2
 $true $true
 2 -le 2 2 -le 2
Ligne 208: Ligne 208:
 Les boucles permettent de répéter un code un certain nombre de fois. Les boucles permettent de répéter un code un certain nombre de fois.
  
-<note important>Il faut toujours faire attention à ne pas créer une boucle infinie. Pensez à prévoir une porte de sortie.</note>+<callout type="warning" icon="true" title="Boucle infinie">Il faut toujours faire attention à ne pas créer une boucle infinie. Pensez à prévoir une porte de sortie.</callout>
  
 ==== ForEach-Object ==== ==== ForEach-Object ====
Ligne 230: Ligne 230:
 5 5
 </sxh> </sxh>
 +
 +=== Parallélisation ===
 +
 +  * Référence : [[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7|Microsoft]]
 +
 +<callout type="warning" icon="true" title="Mise à jour du 22/02/2020">Dans Powershell Core, **ForEach** n'est plus la même chose que **ForEach-Object**.
 +  * **ForEach-Object** :  Permet la gestion des éléments du pipeline. Dispose désormais de l'option ''-Parallel'' permettant la gestion de plusieurs boucles en simultané (parallélisation).
 +  * **ForEach** : Ne prend pas en charge ni le pipeline ni la parallélisation. Traite uniquement un nombre défini d'itération.
 +</callout>
 +
 +<callout type="warning" icon="true" title="Version">Cet exemple n'est valable qu'en Powershell Core (version 7 ou supérieure).</callout>
 +
 +Dans cette exemple, on crée une boucle qui va attendre 30 fois 1 seconde soit théoriquement un total de 30 secondes :
 +<sxh powershell>(Measure-Command { 1..30 | ForEach-Object { Start-Sleep -Seconds 1 } }).Seconds
 +30</sxh>
 +
 +En activant le paramètre ''-Parallel'' :
 +<sxh powershell>(Measure-Command { 1..30 | ForEach-Object -Parallel { Start-Sleep -Seconds 1 } }).Seconds
 +6</sxh>
 +
 +La commande n'a mis que 6 secondes car la parallélisation a traitée 5 commandes (valeur par défaut) en concurrence. Le paramètre ''-ThrottleLimit'' permet de définir le nombre de commandes concurrentes :
 +<sxh powershell>(Measure-Command { 1..30 | ForEach-Object -Parallel { Start-Sleep -Seconds 1 } -ThrottleLimit 10 }).Seconds
 +3</sxh>
 +
 +La parallélisation permet d'améliorer le temps d'exécution des scripts mais attention tout de même. Chaque concurrent va créer son propre espace de travail (''runspace''), traiter la commande et le clore. Dans certains cas, ces multiples actions d'ouvertures et fermetures sont plus longues que le traitement, ce qui entraîne une augmentation global de la durée d'exécution du script. Par exemple :
 +<sxh powershell>(Measure-Command { Get-Process | ForEach-Object { Write-Host $_.Name } }).Milliseconds
 +91
 +(Measure-Command { Get-Process | ForEach-Object -Parallel { Write-Host $_.Name } }).Milliseconds
 +995</sxh>
 +
 +<callout type="info" icon="true" title="Parallélisation">La parallélisation est donc très intéressante mais à utiliser avec sagesse.</callout>
  
 ==== For ==== ==== For ====
Ligne 238: Ligne 269:
  
 <sxh powershell> <sxh powershell>
-For ( $i=0 ; $i -lt 5 ; $i++ )             # On part de 0, on teste si $i est inférieur à 5 et à chaque boucle on ajoute 1 à $1+For ( $i=0 ; $i -lt 5 ; $i++ )             # On part de 0, on teste si $i est inférieur à 5 et à chaque boucle on ajoute 1 à $i
     {                                      # On ouvre le bloc     {                                      # On ouvre le bloc
         Write-Host $i                      # On écrit la valeur de $i         Write-Host $i                      # On écrit la valeur de $i
Ligne 313: Ligne 344:
 # du test aurait renvoyé $false # du test aurait renvoyé $false
 </sxh> </sxh>
- 
- --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/02/20 20:43// 
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • powershell_base1.1581953265.txt.gz
  • Dernière modification : 2020/02/17 14:27
  • (modification externe)