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. $global:myvar2
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.$c = "test"
Auto Incrémentation
$a++
$a--
On ajoute "++" derrière la variable pour ajouter 1, et "--" pour soustraire 1.$a--
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.
$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.
$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.
$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 :$b = 10
if ($a -gt $b)
{
Write-Host "A"
}
else
{
Write-Host "B"
}
-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." }
}
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
}
foreach ($e in $t)
{
Write-Host $e
}
While :
$i = 0
while ($i -ne 10)
{
Write-Host $i
$i++
}
while ($i -ne 10)
{
Write-Host $i
$i++
}
For :
for($i=0;$i -le 10;$i++)
{
write-host $i
}
{
write-host $i
}
Fonction
Déclaration :
function Toto($A,$B)
{
Write-Host $A
Write-Host $B
}
{
Write-Host $A
Write-Host $B
}
Appel :
Toto "Text A" "Text B"