Les bases de PowerShell

PowerShell

Séquences d’échappement

Le caractère d’échappement Windows PowerShell est l’accent grave (`). Pour rendre un caractère littéral, faites-le précéder de `.

Séquences d’échappement spéciales

Caratères d'échappementRésultat
`nNouvelle ligne
`rRetour chariot
`tTabulation
`aAlarm
`bBackspace
`'Guillemet simple
`"Guillemet double
`0Null
``Backtick

Méthodes de traitement d’objets

Ces méthodes permettent de traiter des objets. Par exemple scinder un chaine de caractère.

?View Code POWERSHELL
$file = "fichier.txt"
$file.Split(".")[-1]
txt

Ou moins utile, connaitre la position du premier « l » dans « Hello ».

?View Code POWERSHELL
("Hello").IndexOf("l")
2

Méthodes pour le traitement d’objets.

FunctionDescriptionExample
CompareTo()Compare une chaine avec une autre("Hello").CompareTo("Hello")
Contains()Retourne "True" si la cahine de compairaison spécifié est présent dans une chaine ou si la chaine de comparaison est vide("Hello").Contains("ll")
CopyTo()Copie une partie d'une chaine dans une autre("User!").CopyTo(0, , 6, 5)
EndsWith()Test si la chaine termine avec la chaine spécifié("Hello").EndsWith("lo")
Equals()Test si une chaine est identique à une autre chaine("Hello").Equals()
IndexOf()Retourne l'index de la première occurrence de la chaine de comparaison("Hello").IndexOf("l")
IndexOfAny()Retourne l'index de la première occurrence de la chaine de comparaisonReturns the index of the first occurrence of any character in a comparison string("Hello").IndexOfAny("loe")
Insert()Insert une chaine à l'index spécifié d'une autre chaine("Hello World").Insert(6, "brave ")
GetEnumerator()Récupère un objet qui peut énumérer tous les caractères d'une chaîne("Hello").GetEnumerator()
LastIndexOf()Recherche l'index de la dernière occurrence d'un caractère spécifié("Hello").LastIndexOf("l")
LastIndexOfAny()Recherche l'index de la dernière occurrence d'un caractère d'une chaîne spécifiée("Hello").LastIndexOfAny("loe")
PadLeft()Remplissage d'une chaîne à une longueur déterminée et qui ajoute des caractères blancs à gauche (aligné à droite de chaîne)("Hello").PadLeft(10)
PadRight()Remplissage d'une chaîne à une longueur déterminée et qui ajoute des caractères blancs à droite (aligné à gauche de chaîne)("Hello").PadRight(10) + "World!"
Remove()Supprime le nombre requis de caractères à partir d'une position spécifiée("Hello World").Remove(5,6)
Replace()Remplace un caractère par un autre caractère("Hello World").Replace("l", "x")
Split()Convertit une chaîne avec des points de séparation spécifiés dans un tableau("Hello World").Split("l")
StartsWith()Test si une chaîne commence par un caractère spécifié("Hello World").StartsWith("He")
Substring()Extrait les caractères d'une chaîne("Hello World").Substring(4, 3)
ToCharArray()Convertit une chaîne en un tableau de caractères("Hello World").toCharArray()
ToLower()Convertit une chaîne en minuscules("Hello World").toLower()
ToLowerInvariant()Convertit une chaîne en minuscules à l'aide des règles de casse de la langue invariant("Hello World").toLowerInvariant()
ToUpper()Convertit une chaîne en majuscules("Hello World").toUpper()
ToUpperInvariant()Convertit une chaîne en majuscules à l'aide des règles de casse de la langue invariant("Hello World").ToUpperInvariant()
Trim()Supprime les caractères en blanc à droite et à gauche(" Hello ").Trim() + "World"
TrimEnd()Supprime les caractères vide à droite(" Hello ").TrimEnd() + "World"
TrimStart()Supprime les caractères en blanc à la gauche(" Hello ").TrimStart() + "World"
Chars()Fournit un caractère à la position spécifiée("Hello").Chars(0)

Variables automatiques

VariableDescription
$$Dernier jeton de la ligne de commande précédente
$?État booléen de la dernière commande
$^Premier jeton de la ligne de commande précédente
$_Objet de pipeline actif
$ArgsArguments passés à un script ou à une fonction
$ErrorTableau d’erreurs de commandes précédentes
$ForeachRéférence à l’énumérateur d’une boucle foreach
$HomeRépertoire de base de l’utilisateur ; généralement défini sur %HOMEDRIVE%%HOMEPATH%
$HostRéférence à l’application qui héberge le langage POWERSHELL
$InputÉnumérateur des objets dirigés vers un script
$LastExitCodeCode de sortie du dernier programme ou script
$MatchesTable de hachage des correspondances trouvées avec l’opérateur de correspondance –
$PSHomeEmplacement d’installation de Windows PowerShell
$profileProfil standard (peut ne pas être présent)
$StackTraceDernière exception interceptée par Windows PowerShell
$SwitchÉnumérateur d’une instruction switch

Chaînes

L’utilisation des guillemets simple ou double a son importance avec PowerShell. Elles permettent de résoudre ou non des opérations arithmétiques.

?View Code POWERSHELL
$resultat  = 'Le resultat est : $(5+3)'
$resultat
Le resultat est : $(5+3)
$resultat  = "Le resultat est : $(5+3)"
$resultat
Le resultat est : 8

Elles permettent de résoudre où non les variables.

?View Code POWERSHELL
$res = $(5+3)
$resultat  = 'Le resultat est : $res'
$resultat
Le resultat est : $res
$resultat  = "Le resultat est : $res"
$resultat
Le resultat est : 8

Elles autorisent l’insertion des caractères spéciaux grâces aux caractères d’échappement.

?View Code POWERSHELL
"Inserer une tabulation entre A et B: A`tB"
Inserer une tabulation entre A et B: A  B

Opérateurs de chaîne Les opérateurs de chaines vous permettent de manipuler des chaines de caractères.

?View Code POWERSHELL
"Bonjour Christophe" -Replace "Christophe","Sébastien"

Voici la liste des opérateurs disponibles.

OpérateurDescriptionExemple
*Répète une chaine"-" * 20
+Concatène des chaines"Bonjour " + "Pierre"
-replaceRemplace une chaine (Insensible à la case)"Bonjour Pierre" -replace "Pierre","Paul"
-creplaceRemplace une chaine (Sensible à la case)"Bonjour Pierre" -replace "pierre","paul"
-eqVérifie l'égalité (Insensible à la case)"Pierre" -eq "pierre"
-ceqVérifie l'égalité (Sensible à la case)"Pierre" -ceq "pierre"
-likeVérifie qu'une chaine contient une autre chaine (Insensible à la case, Accept *)"Pierre" -like "Pier*"
-clikeVérifie qu'une chaine contient une autre chaine (Sensible à la case, Accept *)"Pierre" -clike "Pier*"
-notlikeVérifie qu'une chaine ne contient pas une autre chaine (Insensible à la case, Accept *)"Pierre" -notlike "Pier*"
-cnotlikeVérifie qu'une chaine contient une autre chaine (Insensible à la case, Accept *)"Pierre" -cnotlike "Pier*"
-matchVérifie qu'une chaine contient une autre chaine (Insensible à la case)"Pierre" -match "rr"
-cmatchVérifie qu'une chaine contient une autre chaine (Sensible à la case)"Pierre" -cmatch "rr"
-notmatchVérifie qu'une chaine ne contient pas une autre chaine (Insensible à la case)"Pierre" -notmatch "rr"
-cnotmatchVérifie qu'une chaine contient une autre chaine (Insensible à la case)"Pierre" -cnotmatch "rr"

Switch

$lang représente la valeur actuelle évaluée. Si un tableau est utilisé dans switch, chaque élément du tableau est testé.

?View Code POWERSHELL
$lang = (Get-WmiObject Win32_OperatingSystem -ComputerName SERVER001).oslanguage
$switch = switch ($lang) `
{
1033 {"English"};
1036 {"French"};
default {"Unknown"}
}
$switch

Conditions (If, Else, ElseIf)

L’instruction « If » est peut-être la plus fondamental des options de contrôle disponibles dans PowerShell.
Si l’expression est évaluée à $True alors le script présent dans le corps de l’instruction est exécutée. Si l’expression est évaluée à $False le code dans le corps de la déclaration est sautée.

?View Code POWERSHELL
$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }

La variation « Esle » de l’instruction « If » nous permet également de spécifier du code à exécuter si l’expression dans l’instruction « If » est évaluée à $False.

?View Code POWERSHELL
$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }
else { "Le nombre n'est pas 10." }

Enfin, il est parfois nécessaire de prendre des décisions fondées sur un certain nombre de critères différents. Il est alors nécessaire d’utiliser le « If » et « Elseif ».

?View Code POWERSHELL
$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }
elseif ($r -eq "5"){ "Le nombre est 5." }
else { "Le nombre n'est ni 5 ni 10." }

Boucles (Foreach-Object)

L’utilisation de la cmdlet Foreach-Object ou de son alias Foreach permet de parcourir les valeurs d’un collection et par chacune, exécuter un instruction.

?View Code POWERSHELL
$valeurs = 1,2,3,4,5
Foreach($valeur in $valeurs){ "Le chiffre est $valeur"}

Foreach peut suivre un pipe, il permet alors d’utilisé les valeurs issues de la commande précédent le pipe.

?View Code POWERSHELL
(1..10) | Foreach {"Le chiffre est $_"}

Opérateurs logiques

Les opérateurs logiques permettent de vérifier plusieurs comparaisons dans le même expression.

?View Code POWERSHELL
$r = 5
($r -gt 2) -and ($r -lt 8)
True

Les opérateurs logiques disponibles sont

OpérateurSignification
-andEt logique
-orOu logique
-xorOu exclusif
-notNon logique
!Non logique

  1. Seb
    14/08/2013 à 10:00 | #1

    Je pense qu’il y a une erreur:
    IndexOf retourne la position (en commençant à 0) de la 1ère occurrence de la chaîne de caractères.
    Exemples:
    (« Helllo »).IndexOf(« l ») retourne 2
    (« Hello »).IndexOf(« lo ») retourne 3

  2. Seb
    14/08/2013 à 10:08 | #2

    @Seb
    Précision:
    dans le tableau, la description de cette fonction est exacte.
    l’erreur est d’écrire que IndexOf permet de compter le nombre de « l » dans « Hello ».

  3. 12/09/2013 à 19:15 | #3

    C’est corrigé.

    Merci

    Christophe

  4. Alexandre
    09/03/2014 à 20:02 | #4

    Merci Christophe Bluteau
    Je viens de lire votre article et je me régale
    (étudiant Certifs MS 70-642 et 70-640)
    Alexandre

  5. jean87
    24/06/2014 à 15:19 | #5

    salut
    aider moi à ecrire avec powershell un script de sauvegarde de données automatique sous windows 7 pour mon rapport
    debutant en progammation
    merci bien

  1. 19/12/2013 à 00:39 | #1
  2. 17/05/2014 à 09:41 | #2