====== 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