mardi 27 novembre 2012

Généralités PowerShell.

Nous allons commencer doucement avec des généralités sur la programmation en PowerShell. Actuellement je travail avec du PowerShell v2 et l’éditeur PowerShell_ISE qui vient avec. Il y a certainement mieux comme éditeur, mais au moins celui est gratuit et je commence a bien connaitre ses petits défauts.

Les commentaires

#Tout ce qui est derrière un caractère "#" est en commentaire.

Les variables

$myvar1
$global:myvar2
La variable local utilise le préfixe $ suivi du nom de la variable.
La variable globale  utilise le préfixe $global: suivi du nom de la variable.
A moins de maitriser la portée des variables comme un dieu, je déconseille d'utiliser le même nom pour une variable globale et une variable locale.

Affectations

$a = 5
$c = "test"
En général je ne déclare pas les types de variables. C'est fait automatique lors de la première affectation.

Auto Incrémentation

$a++
$a--
On ajoute "++" derrière la variable pour ajouter 1, et "--" pour soustraire 1.

Tableaux

Une dimension :
$t = @()       #Déclaration.
$t += ,@(5)    #Ajoute un élément valant 5 au tableau.
$a = $t[0]     #Affecte la premier valeur du tableau à la variable $a.
$t[0] = 10     #Change la valeur du premier élément du tableau.

Deux dimensions :
$t = @()          #Déclaration.
$t += ,@(1,2,3)   #Ajoute une ligne de 3 éléments au tableau.
$t += ,@(4,5,6)   #Ajoute une ligne de 3 éléments au tableau.
$t += ,@(7,8,9)   #Ajoute une ligne de 3 éléments au tableau.
$a = $t[0][2]     #Affecte la valeur du 3éme élément de la 1er ligne à $a.
$t[1][0] = 10     #Change la valeur du 1ère élément de la 2ème ligne.

Autre méthode* pour un tableau à deux dimensions :
$t = New-Object System.Collections.Generic.List[object]    #Déclaration.
$o = New-Object Psobject -Property @{ label0=1; label1=2}  #Nouvelle ligne.
$t.Add($o)          #Ajoute la ligne au tableau.
$o = New-Object Psobject -Property @{ label0=3; label1=4}  #Nouvelle ligne.
$t.Add($o)          #Ajoute la ligne au tableau.
$o = New-Object Psobject -Property @{ label0=5; label1=6}  #Nouvelle ligne.
$t.Add($o)          #Ajoute la ligne au tableau.
$a = $t[0].label1   #Affecte la valeur du 2ème élément de la 1er ligne à $a.
$t[1].label0 = 11   #Change la valeur du 1re élément de la 2ème ligne du tableau.
*Note : Cette méthode est bien plus rapide pour la création de tableau contenant plus de 20000 éléments. Étrangement, l'utilisation de la fonction "$t += ,@()" est de plus en plus lente au fur et à mesure que le nombre d'éléments augmente. Alors que l'utilisation du "System.Collection" comme tableau permet de garder une vitesse constante quelques soit le nombre d'éléments présent. 
 
Condition IF

$a = 5
$b = 10
if ($a -gt $b)
  {
    Write-Host "A"
  }
 else
  {
    Write-Host "B"
  }
 Les opérateurs les plus utilisés sont :
  -eq pour "égale"
  -ne pour "non égale"
  -gt pour "plus grand que"
  -lt pour "plus petit que"

Condition SWITCH

$test = 5
switch ($test)
  {
          0 { Write-Host "test est égale à 0." }
          #...
          5 { Write-Host "test est égale à 5." }

    default { Write-Host "Valeur non trouvée." }
  }

Boucles

Foreach :
$t = 0,1,2,3,4,5,6,7  #Tableau à 1 dimension de 8 éléments
foreach ($e in $t)
 {
   Write-Host $e
 }

While :
$i = 0
while ($i -ne 10)
 {
   Write-Host $i
   $i++
 }

For :
for($i=0;$i -le 10;$i++)
  {
    write-host $i
  }

Fonction

Déclaration :
function Toto($A,$B)
 {
   Write-Host $A
   Write-Host $B
 }

Appel :
Toto "Text A" "Text B"