Quand vous récupérer un résultat sous forme d’array, le contenu est indexé
La sécurité avant tout
Quand vous récupérer un résultat ce n’est pas forcément un array, c’est le cas quand vous ne recevez qu’un résultat.
Exemple de problème :
$Test = "Toto"
$Test[0]
T
Ici la variable est de type string et non pas array, la différence est que ce sont les caractères qui sont indexés
Comment faire ?
$Test = @("Toto")
$Test[0]
Toto
Ici on force le type array donc l’index 0 ne renvoie plus le premier caractère mais bien la première entrée de l’array
Exemple pratique:
Function Get-Toto {return "toto"}
#Le soucis de ne pas forcer le type:
(Get-Toto)[0]
# Le résultat:
t
# La bonne méthode :
@(Get-Toto)[0]
# le résultat:
toto
Ce n’est pas tout, avec le Select-Object pour pouvez aussi contourner ce problème, exemple:
Get-Toto | Select.Object -First 1
Vous voyez qu’avec l’index on appelle le 0, mais avec slect-object on fait -First 1. C’est parce qu’un index commence à zéro, donc le premier élément à l’index 0, le second l’index 1, …. Mais avec le select-object on ne lui demande de séléctionner l’index mais les le premier résultat, l’approche est différente, le résultat est le même
Maintenant que vous connaissez les bases, passons aux choses sérieuses
Sélectionner des lignes dans un fichier
Les 3 premières lignes
# 0..2 parce que l'index commence à 0, donc 0, 1, 2 ça fait trois lignes
@(Get-Content .\monFichier.txt)[0..2]
# OU
Get-Content .\MonFichier.txt | Select-Object -First 3
Les 5 dernières lignes
# Les nombres négatifs permettent d'attaquer l'index par la fin, le dernier élément étant -1
@(Get-Content .\MonFichier.txt)[-5..-1]
# OU
Get-Content | Select-Object -Last 5
Magique n’est ce pas ? Mais l’index est plus puissant que le Select-Object…
# On sélectionne la 15ème ligne (n'oubliez pas que l'index commence à 0)
@(Get-Content .\MonFichier.txt)[14]
Ici le Select-Object ne peux pas aider, on pourrait utiliser à la place un Where-Object mais dans le cas présent, ce serait sortir le basooka pour défoncer une mouche.
Vous voulez les lignes de 8 à 12 et la 15 ème et les deux dernières ? Pas de soucis !
@(Get-Content .\MonFichier.txt)[7..11 + 14 + -2..-1]
Magique !
0 commentaire