Les scrpits powershell sont des fichiers .ps1 il consiste simplement d’un ensemble de commandes tels qu’elle peuvent être écrites dans la console, mais enregistrée sous forme de fichier (permettant ainsi de les réutiliser et les modifier simplement).

Créer une condition

  • Vérifier une égalité avec une condition
# -eq est ==
# -lt est <
# -gt est >
# -ge est >=
# -le est <=
# -ne est !=
if ($nombre -eq 145) {
    Write-Output "Le nombre est 145"
}

Création et utilisation de fonctions

Nomenclature d'une commande Powershell

Toutes les commandes powershell sont composées d’un verbe et d’un nom. Par exemple New-ADUser, Remove-ADUser, New-SmbShare, etc.

Il est recommandé de suivre cette même convention pour vos propre fonctions

  • Créer une fonction
function Compute-Addition {
    # A noter que les types comme précisés ici ne sont pas obligatoire
    param(
        [int]$first,
        [int]$second
    )
 
    $resultat = $first + $second
 
    # Write-Output fait office de return en Powershell
    # C'est également cette même fonction qui sert à print des informations dans la console
    Write-Output $resultat
}
  • Exécuter une fonction
Compute-Addition 1 2

Lecture et traitement d’un fichier

  • Récupérer le contenu d’un fichier dans une variable
$ma_variable = Get-Content ./mon-fichier.csv
  • Itérer sur les lignes ou sur les éléments d’un tableau
foreach ($line in $ma_variable) {
    Write-Output "The line is $line"
}
  • Vérifier une expression régulière. Dans ce cas précis, pour vérifier qu’une ligne est un csv de deux colonnes et en extraire le contenu des deux colonnes
if ($line -match "^([^,]+),([^,]+)$") {
    $first_column = $Matches[1]
    $second_column = $Matches[2]
 
    Write-Output "First column is $first_column and the second column is $second_column."
}

Gestion des erreurs

  • Ici, on va par exemple tester si un fichier “test.txt” existe ou non.
try {
    # Il est important de préciser "-ErrorAction Stop" car seule les 
    # erreurs fatales de ce type sont gérées dans le try-catch
    $content = Get-Content "test.txt" -ErrorAction Stop
    
    Write-Output "Le fichier test.txt existe"
} catch {
    Write-Output "Le fichier test.txt n'existe pas"
}

Opérations sur des tableaux de valeurs

  • Créer un tableau de valeurs vide, puis y ajouter des choses
$mon_tableau = @()
$mon_tableau += "Nouvelle valeur"
$mon_tableau += "Autre nouvelle valeur"
  • Créer un tableau de valeurs pré-remplis
$mon_tableau = ("Nouvelle valeur", "Autre nouvelle valeur")
  • Mélanger un tableau
$mon_tableau_melange = $mon_tableau | Sort-Object {Get-Random}

Opérations sur des chaines de caractères

  • Concaténer toutes les valeurs d’un tableau dans un string
# L'information donnée dans le -join sera le séparateur, 
# si rien n'est mit (comme ici), alors il n'y aura pas de séparateur
$ma_chaine = $mon_tableau -join ""
  • Formatter une chaine de caractère sur base d’un template (par exemple pour des nombres)
$nombre = 145
$nombre_avec_zeros = "{0:d4}" -f $nombre
# $nombre_avec_zeros retournera "0145"
  • Manipuler et transformer des chaines de caractères
$ma_chaine = "hello world"
 
$ma_grande_chaine = $ma_chaine.ToUpper()
$ma_petite_chaine = $ma_chaine.ToLower()
  • Couper une chaine de caractère (par exemple demander 5 caractères à partir du premier caractère)
$ma_partie_de_chaine = $ma_chaine.Substring(0, 5)
  • Transformer une chain de caractère en tableau de caractères
$mon_tableau = "hello world".ToCharArray()
  • Créer un tableau correspondant à un range de nombre
$mon_range = 0..9 # (comprends tous les nombres de 0 jusqu'a 9)